试图理解 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.
我正在处理一个项目,我们需要加密一些用户凭据(用户名、密码、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.