无法从密码和salt生成AES 256密钥以与RNCryptor一起使用

时间:2014-09-25 07:10:06

标签: ios encryption aes salt rncryptor

我想用Salt生成一个用于AES 256加密的密钥。我使用BBASE lib,参考此链接: Create random 128 bit AES Encryption key in iOS

我的代码是:

    NSData* salt = [BBAES randomDataWithLength:BBAESSaltDefaultLength];
            NSData *key = [BBAES keyBySaltingPassword:@"password" salt:salt         keySize:BBAESKeySize256 numberOfIterations:BBAESPBKDF2DefaultIterationsCount];
            NSLog(@"Data ASE Key %@",key);
            NSString *aString  = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];

我想用这个'键'进入下面的代码:(这里我使用的是RNCryptor lib)

    NSData *encryptedData = [ RNEncryptor encryptData:bodyData withSettings:kRNCryptorAES256Settings password:aString error:&error];

    NSData *decryptedData = [RNDecryptor decryptData:encryptedData withSettings:kRNCryptorAES256Settings password:aString error:&error];

我需要传递NSString类型的键,但是当我将NSData转换为NSString时,它会给出NULL值并且我的应用程序崩溃了。我该怎么办??这有什么解决方案吗?

2 个答案:

答案 0 :(得分:2)

并非所有数据都是有效的UTF-8字符串,大多数随机数据都不是。基本上这就是Base64存在的原因,将8位数据转换为ASCII字符串 - 然后返回。当然还有其他方法。

但正如邓肯所说,为什么?读取RNCryptor代码,它已经处理了将密码(字符串)转换为安全密钥。

答案 1 :(得分:-2)

谢谢@Duncan& @Zaph :)我找到了解决方案!!

而不是

    NSString *aString  = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];

我用过这个:

    NSString *aString  = [[NSString alloc] initWithData:key encoding:NSASCIIStringEncoding];