我有两个NSStrings,它们是AES256加密的。是否可以比较这两个加密的字符串?
NSString *passKey = @"mykey";
NSData *data = [@"string to encrypt" dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSData *encryptedData1 = [RNEncryptor encryptData:data
withSettings:kRNCryptorAES256Settings
password:passKey
error:&error];
NSData *encryptedData2 = [RNEncryptor encryptData:data
withSettings:kRNCryptorAES256Settings
password:passKey
error:&error];
NSString *aesEncryptedString1 = [[NSString alloc] initWithData:encryptedData1 encoding:NSASCIIStringEncoding];
NSString *aesEencryptedString2 = [[NSString alloc] initWithData:encryptedData2 encoding:NSASCIIStringEncoding];
NSLog(@"aesEencryptedString1 is %@",encryptedstring1);
NSLog(@"aesEencryptedString2 is %@",encryptedstring2);
if ([aesEncryptedString1 isEqualToString:aesEencryptedString2])
{
NSLog(@"Success");
}
答案 0 :(得分:6)
好的,在您添加代码后,您似乎正在使用RNCryptor:
您的加密产生:
这会生成包含标头,加密盐,HMAC的NSData 盐, IV ,密文和HMAC
所以是的,你需要解密才能进行比较。您可以阅读IV here以及良好的讨论ecb vs cbc
答案 1 :(得分:3)
也许。它取决于加密期间使用的模式,填充,密钥和IV(如果适用)。假设使用了相同的密钥和填充...
<强>更新强>
感谢发布代码。鉴于您的意见,如果您甚至需要为您的用例使用加密,我会重新考虑。如果这是用于身份验证,则哈希算法或密钥派生函数可能更合适。