我正在对存储在我的应用程序中的数据进行加密。我在加密和解密数据方面已经走得很远了,我的问题是,当使用错误的密钥时,我似乎无法强制出现明显的解密错误。我的解密功能:
+ (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,所以我假设解密操作是成功的,只是由于错误的密钥而给出了垃圾数据。
那么,确定是否使用正确的密钥来解密数据的最佳实践是什么?