试图让RNCryptor感觉
我正在开发一个项目,我们需要加密一些用户凭证(用户名,密码,userId等)以传递给我们的服务器。我们决定使用AES256
来实现这一点。在这个问题上做一些研究很难避免注意到一个项目,RNCryptor
声称是一个易于使用的解决方案,以解决这个问题。试图让RNCryptor感觉
所以我把这个框架包含到我的项目中,很快就意识到它并不像我想象的那样直截了当。 ()派生出一个密钥,我想用我的密钥加密,()将密钥和我的字符串传递给适当的密钥RNCryptor
的方法,()从所述方法中取回我加密的字符串。
但是这太好了,
的RNCryptor
现实情况是,它有这样的方法:
[RNEncryptor encryptData:someData
withSettings:kRNCryptorAES256Settings
password:someString
error:&someError];
这是因为术语的混乱。
什么是密码?
这从来没有解释过。密码是什么?这是用于我想要加密的用户密码,我想要加密的密码密钥,还是登录到我的计算机的密码(sarcasm)。
ENCRYPT DATA?
这是一个UTF8编码的字符串,我想要加密的用户凭证是什么?这是我最好的猜测,但再次,在Github的“文档”RNCryptor
中没有解释。
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认证。
Zaph的回答是正确的,但我想更好地理解你的问题。当你说“派生密钥”时,你期望从*派生出什么? (RNCryptor从您传递的密码中派生出来。)加密密码只是加密数据的特定情况;加密算法不关心你正在加密的东西。这里很难理解用例;它感觉就像你真正想要的是密钥协议协议,而不是加密算法。请注意,如果可能的话,你应该避免发送密码;有关更多信息,请参阅http://*.com/a/31386549/97337。 –
你也可以在https://github.com/RNCryptor/RNCryptor找到FAQ。当我将它添加到Swift版本时,我没有用这个FAQ更新ObjC实现;我应该把它放到它自己的东西,以便各种实现可以引用一个单一的常见问题。 –