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