RNCryptor:使用rncrypt(cli)加密,然后使用RNDecryptor在iOS中解密

时间:2015-07-09 13:28:30

标签: ios objective-c encryption rncryptor

当我使用RNCryptor的终端版本加密文件,然后尝试使用RNDecryptor在Objective-C中解密此文件时,我总是收到错误"未知标题"。

我理解这是因为我的第一个字节是' A'而不是' 2'或kRNCryptorFileVersion,但我不知道为什么会这样。

如果我使用终端版本解密文件,它会按预期工作。

我使用以下方法加密文件: ./rncrypt -p someKey "$(cat test.txt)" > encr.txt

这给出了如下输出: AwHcVbXbpyI7S/RBXlVhRP1coKqFmSEFDtgFaj/JGJ181qEb024uVdt7lHWqUvUvm1rwdM4yQQ+gsMepHhR58v054qvhO4yu98N2bHGuV28aUA==

要在iOS中解密,请执行以下操作:

NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"encr" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:resourcePath];

NSError *error;
NSData *uncrypted = [RNDecryptor decryptData:data withPassword:@"someKey" error:&error];

我做错了什么?

1 个答案:

答案 0 :(得分:4)

rncrypt测试程序输出base64编码数据。在将其传递给解密器之前,您需要对其进行解码。请参阅[NSData initWithBase64EncodedData:options:]

请注意,如果kRNCryptorFileVersion为2,则您使用的是稍微损坏的RNCryptor版本,该版本对多字节密码的安全性较差(例如中文)。我强烈建议使用v3格式的更高版本。