1

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

所以我将这个框架包含在我的项目中,并很快意识到它并不像我想象的那么简单。我希望有一个解决方案,我可以通过简单地加密我的凭据字符串 - ( 1 ) 派生一个我想用来加密我的字符串凭据的密钥,( 2 ) 将密钥和我的字符串传递到适当RNCryptor的方法中, ( 3 ) 从所述方法中取回我的加密字符串。

然而,这太好了,令人难以置信。

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

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

由于术语,这令人困惑。

什么是密码?

这从来没有解释过。什么密码?这是我要加密的用户密码、我要加密的密码密钥还是登录我的计算机的密码(讽刺)。

加密数据?

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

4

1 回答 1

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、加密数据的身份验证和填充的密钥派生。

于 2016-11-18T21:25:47.480 回答