アプリケーションに保存されているデータの暗号化を組み込む作業を行っています。私はデータの暗号化と復号化をかなり進めましたが、私の問題は、間違ったキーが使用されたときに明らかな復号化エラーを強制できないように見えることです. 私の復号化機能:
+ (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 を受け取る必要があるため、復号化操作が成功したと仮定し、間違ったキーのためにガベージ データを提供しただけです。
では、データの復号化に正しいキーが使用されたかどうかを判断するためのベスト プラクティスは何ですか?