【问题标题】:Unable to generate an AES 256 key from password and salt for use with RNCryptor无法从密码和盐生成 AES 256 密钥以用于 RNCryptor
【发布时间】:2014-11-19 21:05:12
【问题描述】:

我想使用 Salt 生成一个用于 AES 256 加密的密钥。我正在使用 BBASE 库,请参考此链接: 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 值并且我的应用程序会崩溃。我该怎么办??有什么解决办法吗??

【问题讨论】:

  • RNCryptor 将使用随机盐为您执行密钥派生。你有什么理由想自己做这个推导吗?

标签: ios encryption aes salt rncryptor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    代替

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

    我用过这个:

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

    【讨论】:

    • 您确实需要研究编码并了解发生了什么。
    猜你喜欢
    • 2017-06-07
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多