无法生成密码和盐中使用的AES 256键与RNCryptor

问题描述:

我要生成用盐腌AES 256 encryption.I的关键正在使用BBASE LIB,称此链接: Create random 128 bit AES Encryption key in iOS无法生成密码和盐中使用的AES 256键与RNCryptor

我的代码:

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]; 

我需要通过类型NSStr的关键但是,当我将NSData转换为NSString时,它会给出NULL值并导致我的应用程序崩溃。我该怎么办??有没有解决方案?

+1

RNCryptor将执行密钥推导对你来说,使用随机盐。你有什么理由想自己做这个推导吗? – 2014-09-25 07:36:52

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

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

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

而不是

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

我用这个:

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

你真的需要学习编码和理解发生了什么。 – zaph 2014-09-25 16:20:01