是否可以比较iOS中的两个AES加密字符串?

时间:2013-08-14 11:59:35

标签: ios macos aes

我有两个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");
}

2 个答案:

答案 0 :(得分:6)

好的,在您添加代码后,您似乎正在使用RNCryptor

您的加密产生:

  

这会生成包含标头,加密盐,HMAC的NSData   盐, IV ,密文和HMAC

所以是的,你需要解密才能进行比较。您可以阅读IV here以及良好的讨论ecb vs cbc

答案 1 :(得分:3)

也许。它取决于加密期间使用的模式,填充,密钥和IV(如果适用)。假设使用了相同的密钥和填充...

  • 如果模式是ECB,那么是的,您可以像这样比较密文的字符串。
  • 如果模式是CBC(或使用IV的任何其他模式),并且每个加密使用随机IV,那么不,比较这样的字符串将不起作用,因为两个相同的字符串将加密到不同的密文。在这种情况下,比较的唯一方法是解密字符串。
  • 如果模式是CBC(或使用IV的任何其他模式),并且您使用固定的IV,则是,您可以比较密文的字符串。

<强>更新

感谢发布代码。鉴于您的意见,如果您甚至需要为您的用例使用加密,我会重新考虑。如果这是用于身份验证,则哈希算法或密钥派生函数可能更合适。