我正在一个项目上,我们需要加密一些用户凭据(用户名,密码,userId等)以传递到我们的服务器。我们已决定使用AES256
来实现此目的。在这个问题上进行一些研究,很难避免注意到那里的一个项目,RNCryptor
声称是这个问题的易于使用的解决方案。
因此,我将框架包含在我的项目中,并很快意识到它并不像我想的那么简单。我希望找到一种解决方案,通过简单的-( 1 )派生一个我想用其加密我的字符串凭证的密钥,( 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
身份验证密钥。+ (NSData *)encryptData:(NSData *)data withSettings:(RNCryptorSettings)settings encryptionKey:(NSData *)encryptionKey HMACKey:(NSData *)HMACKey error:(NSError **)error;
RNCryptor是您的最佳选择,它可以处理来自密码的密钥派生,随机IV,加密数据的身份验证和填充。