我有一个解密/加密方法,CCCrypt()
它在 iOS5 上运行得非常好。现在我正在使用 iOS6 SDK 并且从未更改过我的代码,但似乎有些东西坏了。我仍然可以用一个密钥加密一个字符串并解密它,但是如果我使用另一个密钥来解密同一个字符串,那么CCCryptStatus
返回的结果CCCrypt()
仍然是0(kCCSuccess)
- 即使解密失败,因为在那之后我的 NSData 没有被填充。在 iOS5 上,我收到了我可以处理的错误消息 -4303。有什么想法现在有什么问题吗?
我的代码:
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
if (encryptOrDecrypt == kCCDecrypt)
{
data = [GTMBase64 decodeData:data];
}
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCKeySizeAES256,
NULL ,
[data bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);
if (cryptStatus != kCCSuccess){
// do something, but cryptStatus is always 0!
}
编辑:在 iPad Simulator 5 上对其进行了测试。当我使用另一个密钥进行解密时,我收到的状态是 -4303。仅在 ios6 中返回的状态为 0。