试图理解 RNCryptor

Trying To Make Sense of RNCryptor

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

所以我将该框架纳入了我的项目,并很快意识到它并不像我想象的那么简单。我希望找到一个解决方案来加密我的凭据字符串,只需 - (1) 派生一个密钥,我想用它来加密我的字符串凭据,( 2) 将密钥和我的字符串传递给适当的 RNCryptor 方法,(3) 从所述方法中检索我的加密字符串。

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

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

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

由于术语的原因,这令人困惑。

密码是什么?

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

加密数据?

这是我要加密的用户凭据的 UTF8 编码字符串吗?这是我最好的猜测,但同样没有在 RNCryptor Github "documentation".

中解释

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 is you best choice, it handles key derivation from a password, a random IV, authentication of the encrypted data and padding.