Я работаю над включением шифрования данных, хранящихся в моем приложении. Я продвинулся довольно далеко в том, что я шифрую и расшифровываю данные, моя проблема в том, что я не могу вызвать очевидную ошибку дешифрования, когда используется неправильный ключ. Моя функция расшифровки:
+ (NSData *)decryptedDataForData:(NSData *)data
password:(NSString *)password
iv:(NSData *)iv
salt:(NSData *)salt
error:(NSError **)error {
NSAssert(iv, @"IV must not be NULL");
NSAssert(salt, @"salt must not be NULL");
NSData *key = [self AESKeyForPassword:password salt:salt];
size_t outLength;
NSMutableData *
decryptedData = [NSMutableData dataWithLength:data.length];
CCCryptorStatus
result = CCCrypt(kCCDecrypt,
kAlgorithm,
kCCOptionPKCS7Padding,
key.bytes,
key.length,
iv.bytes,
data.bytes,
data.length,
decryptedData.mutableBytes,
decryptedData.length,
&outLength);
if (result == kCCSuccess) {
decryptedData.length = outLength;
}
else {
if (error) {
*error = [NSError errorWithDomain:kRNCryptManagerErrorDomain
code:result
userInfo:nil];
}
return nil;
}
return decryptedData;
}
Это взято с http://robnapier.net/aes-commoncrypto для справки.
Согласно документации CCCrypt, я должен получить kCCDecodeError, если мои данные неправильно расшифровываются, поэтому я предполагаю, что операция расшифровки прошла успешно, просто выдала мусорные данные из-за неправильного ключа.
Итак, как лучше всего определить, был ли использован правильный ключ для расшифровки данных?