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

因此,我将框架包含在我的项目中,并很快意识到它并不像我想的那么简单。我希望找到一种解决方案,通过简单的-( 1 )派生一个我想用其加密我的字符串凭证的密钥,( 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身份验证密钥。
+ (NSData *)encryptData:(NSData *)data withSettings:(RNCryptorSettings)settings encryptionKey:(NSData *)encryptionKey HMACKey:(NSData *)HMACKey error:(NSError **)error;

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

10-05 18:36