Ios 试图理解RNCryptor

Ios 试图理解RNCryptor,ios,encryption,rncryptor,Ios,Encryption,Rncryptor,我正在从事一个项目,我们需要加密一些用户凭据(用户名、密码、用户ID等)以传递到我们的服务器。为了实现这一点,我们决定使用AES256。在做一些关于这个主题的研究时,很难避免注意到一个项目,RNCryptor,它声称是解决这个问题的一个易于使用的解决方案 所以我把这个框架加入到我的项目中,很快就意识到它并不像我想象的那样直截了当。我希望找到一个解决方案,我可以通过简单的方式加密我的凭证字符串——(1)派生一个我想用以加密我的字符串凭证的密钥,(2)将密钥和我的字符串传递到相应的RNCryptor

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

所以我把这个框架加入到我的项目中,很快就意识到它并不像我想象的那样直截了当。我希望找到一个解决方案,我可以通过简单的方式加密我的凭证字符串——(1)派生一个我想用以加密我的字符串凭证的密钥,(2)将密钥和我的字符串传递到相应的
RNCryptor
方法中(3)从所述方法检索我的加密字符串

然而,这太好了,不可能是真的

RNCryptor
的实际情况是它有如下方法:

[RNEncryptor encryptData:someData 
            withSettings:kRNCryptorAES256Settings
                password:someString
                   error:&someError];
这是因为术语混乱

什么是密码?

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

加密数据?


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

password
用于生成加密密钥,它是一个
NSString
数据加密
encryptData
是要加密的数据,是一个
NSData

加密处理数据,即8位字节的数组。您需要将所有数据转换为
NSData
。对于
NSString
有以下方法:

NSData *dataToBeEncrypted = [myString dataUsingEncoding: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、加密数据的身份验证和填充


扎夫的回答是正确的,但我想更好地理解你的问题。当你说“派生一个键”时,你期望它从何而来?(RNCryptor从您传递的密码中派生出来。)加密密码只是加密数据的一种特殊情况;加密算法并不关心您加密的内容。这里很难理解用例;感觉您真正想要的是密钥协议,而不是加密算法。请注意,如果可能的话,您应该避免发送密码;有关更多信息,请参阅。您也可以在“有用”中找到常见问题解答。当我将ObjC实现添加到Swift版本时,我没有用这个FAQ更新它;我可能应该把它拉到它自己的东西中,以便各种实现可以引用一个通用的FAQ。
+ (NSData *)encryptData:(NSData *)data withSettings:(RNCryptorSettings)settings encryptionKey:(NSData *)encryptionKey HMACKey:(NSData *)HMACKey error:(NSError **)error;