以下代码在 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
。从 SecKeyEncrypt
返回后,cypherSize
始终为 256
。
在 iOS5 上运行的 iOS5 SDK,上面相同的代码导致 status = -50
!经过一些实验后,我发现 mySize = 244
(比以前低了一个!)再次起作用。我在 iOS5.0 上检查了 SecKeyEncrypt
的文档,它没有改变 - 因此,大小也不应该改变。
造成这种差异的原因是什么?
最佳答案
我认为您的问题是 cipherSize
。您未初始化该变量,但在 SecKeyEncrypt()
的输入中它应该包含您的 myBuffer
缓冲区的大小(在输出时它包含实际写入的字节数到那个缓冲区)。
关于iphone - iOS 5 与 iOS 4.3 上的加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407764/