试图理解RNCryptor

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

所以我将框架包含在我的项目中,并很快意识到它并不像我想象的那样直截了当。 我希望通过简单的方法解决我可以加密我的凭据字符串的问题 – ( 1 )导出一个我想加密我的stringed凭证的密钥,( 2 )将密钥和我的字符串传递给适当的RNCryptor方法,( 3 )从所述方法中检索我的加密字符串。

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

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

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

由于术语,这令人困惑。

什么是密码?

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

加密数据?

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

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身份validation密钥。

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

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