我想用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值并且我的应用程序崩溃了。我该怎么办??这有什么解决方案吗?
答案 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];