试图理解RNCryptor

时间:2016-11-18 20:06:06

标签: ios encryption rncryptor

我正在开发一个项目,我们需要加密一些用户凭据(用户名,密码,userId等)以传递给我们的服务器。我们决定使用AES256来实现这一目标。对这个主题进行一些研究很难避免注意到那里的项目,RNCryptor声称这是一个易于使用的解决方案。

所以我把框架包含在我的项目中,很快意识到它并不像我想的那么直截了当。我希望找到一个解决方案,我可以通过简单地加密我的凭证字符串 - ( 1 )派生出一个我希望使用加密我的串行凭证的密钥,( 2 )将密钥和我的字符串传递给适当的RNCryptor方法,( 3 )从所述方法中检索我的加密字符串。

然而,这太好了,不可能。

RNCryptor的现实是它有这样的方法:

[RNEncryptor encryptData:someData 
            withSettings:kRNCryptorAES256Settings
                password:someString
                   error:&someError];

由于术语,这令人困惑。

什么是密码?

这从未解释过。什么密码?这是我要加密的用户密码,我要加密的密码密钥,还是登录我电脑的密码( sarcasm )。

加密数据?

这是我想要加密的用户凭据的UTF8编码字符串吗?这是我最好的猜测,但在RNCryptor Github“文档中没有解释。”

1 个答案:

答案 0 :(得分:1)

password用于生成加密密钥,数据加密为NSStringencryptData是要加密的数据,是NSData

加密适用于数据,即8位字节的数组。您需要将所有内容转换为NSData。对于NSString,有方法:

NSData *dataToBeEncrypted = [myString dataUsingEncoding:NSUTF8StringEncoding];

NSString *myString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];

此外,它需要加密密钥,RNCryptor需要NSString并从中获取加密密钥。

当然有选项,虽然RNCryptor内部处理大部分内容,但开发人员仍然可以使用它。

有两个主要版本有更多选项,你可能最好使用密码版本。

一个人使用NSString密码:

+ (NSData *)encryptData:(NSData *)data withSettings:(RNCryptorSettings)settings password:(NSString *)password error:(NSError **)error;

第二次使用NSData加密密钥和NSData身份验证密钥。

+ (NSData *)encryptData:(NSData *)data withSettings:(RNCryptorSettings)settings encryptionKey:(NSData *)encryptionKey HMACKey:(NSData *)HMACKey error:(NSError **)error;
  

RNCryptor是您的最佳选择,它通过密码,随机IV,加密数据验证和填充来处理密钥派生。