У меня есть метод дешифрования/шифрования с использованием 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!
}
EDIT: Протестировано на iPad Simulator 5. Когда я делаю дешифрование с помощью другого ключа, я получаю статус -4303. Только в ios6 возвращается статус 0.