0

我想用 Salt 生成一个用于 AES 256 加密的密钥。我正在使用 BBASE lib,请参考此链接: 在 iOS 中创建随机 128 位 AES 加密密钥

我的代码是:

    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 值并且我的应用程序崩溃。我应该怎么办??有什么解决办法吗??

4

2 回答 2

2

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

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

于 2014-09-25T08:19:52.567 回答
-2

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

代替

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

我用这个:

    NSString *aString  = [[NSString alloc] initWithData:key encoding:NSASCIIStringEncoding];
于 2014-09-25T11:19:08.347 回答