以下代码在iOS4.3的iOS4.3 SDK上生成status = 0
:
size_t mySize, cypherSize;
mySize = (secKeyGetBlockSize() - 11);
// Code that reads in mySize bytes into buffer and
// sets cipherSize to secKeyGetBlockSize().
// [...]
status = SecKeyEncrypt(myPublicKey,
kSecPaddingPKCS1,
myBuffer,
mySize,
myBuffer,
&cipherSize);
事实证明
setKeyGetBlockSize()
是256
,因此是mySize = 245
。从cypherSize
返回后,256
始终为SecKeyEncrypt
。在运行于iOS5的iOS5 SDK上,上述相同代码将生成
status = -50
!经过一些实验,我发现mySize = 244
(比以前低一个!)再次起作用。我检查了iOS5.0上SecKeyEncrypt
的文档,它没有更改-因此,大小也不应该更改。这种差异的原因是什么?
最佳答案
我认为您的问题是cipherSize
。您没有对该变量进行初始化,但是在输入SecKeyEncrypt()
时,它应该包含myBuffer
缓冲区的大小(在输出时,它包含实际写入该缓冲区的字节数)。