1

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

我知道这是因为我的第一个字节是 'A' 而不是 '2' 或 the 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];

我究竟做错了什么?

4

1 回答 1

4

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

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

于 2015-07-09T14:50:45.703 回答