试图让RNCryptor感觉

问题描述:

我正在开发一个项目,我们需要加密一些用户凭证(用户名,密码,userId等)以传递给我们的服务器。我们决定使用AES256来实现这一点。在这个问题上做一些研究很难避免注意到一个项目,RNCryptor声称是一个易于使用的解决方案,以解决这个问题。试图让RNCryptor感觉

所以我把这个框架包含到我的项目中,很快就意识到它并不像我想象的那样直截了当。 ()派生出一个密钥,我想用我的密钥加密,()将密钥和我的字符串传递给适当的密钥RNCryptor的方法,()从所述方法中取回我加密的字符串。

但是这太好了,

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

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

这是因为术语的混乱。

什么是密码?

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

ENCRYPT DATA?

这是一个UTF8编码的字符串,我想要加密的用户凭证是什么?这是我最好的猜测,但再次,在Github的“文档”RNCryptor中没有解释。

+0

Zaph的回答是正确的,但我想更好地理解你的问题。当你说“派生密钥”时,你期望从*派生出什么? (RNCryptor从您传递的密码中派生出来。)加密密码只是加密数据的特定情况;加密算法不关心你正在加密的东西。这里很难理解用例;它感觉就像你真正想要的是密钥协议协议,而不是加密算法。请注意,如果可能的话,你应该避免发送密码;有关更多信息,请参阅http://*.com/a/31386549/97337。 –

+0

你也可以在https://github.com/RNCryptor/RNCryptor找到FAQ。当我将它添加到Swift版本时,我没有用这个FAQ更新ObjC实现;我应该把它放到它自己的东西,以便各种实现可以引用一个单一的常见问题。 –

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认证。