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