试图理解RNCryptor
我正在开发一个项目,我们需要加密一些用户凭据(用户名,密码,userId等)以传递给我们的服务器。 我们决定使用AES256
来实现这一目标。 对这个问题做一些研究很难避免注意到那里的项目, RNCryptor
声称这是一个易于使用的解决方案。
所以我将框架包含在我的项目中,并很快意识到它并不像我想象的那样直截了当。 我希望通过简单的方法解决我可以加密我的凭据字符串的问题 – ( 1 )导出一个我想加密我的stringed凭证的密钥,( 2 )将密钥和我的字符串传递给适当的RNCryptor
方法,( 3 )从所述方法中检索我的加密字符串。
然而,这太好了,不可能。
RNCryptor
的现实是它有这样的方法:
[RNEncryptor encryptData:someData withSettings:kRNCryptorAES256Settings password:someString error:&someError];
由于术语,这令人困惑。
什么是密码?
这从未解释过。 什么密码? 这是我要加密的用户密码,我要加密的密码密钥 ,还是登录我电脑的密码( 讽刺 )。
加密数据?
这是我想要加密的用户凭据的UTF8编码字符串吗? 这是我最好的猜测,但在RNCryptor
Github“文档”中没有解释。
password
用于生成加密密钥,它是用于加密数据的NSString
。 encryptData
是要加密的数据,是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和填充来处理密钥派生。