1

一位同事向我提供了两个他使用 GNUPG 加密的文本文件,AES128/AES256 没有加盐。

使用以下示例https://stackoverflow.com/a/1400596/300972,我尝试在 iOS 应用程序中解密这两个文件,一个使用 AES256 示例,第二个通过将算法修改为 kCCAlgorithmAES128 并将密钥大小修改为 kCCKeySizeAES128。

将文件加载到 NSData 对象证明是成功的;我能够输出 NSData。但是,在解密时,它们总是以 kCCDecodeError (-4304) 失败。我认为可能是填充,所以我们尝试了不同的变体,原来是 kCCOptionPKCS7Padding,仍然是同样的错误。我尝试了填充 0,它提供了一个截断的 NSData 对象,我无法从中创建 NSString。(UTF8 编码)。

有没有人能够在 iOS 环境中成功解密使用 GNUPG 加密的文件?你能给我们提供经验教训吗?

4

2 回答 2

3

GnuPG 以 OpenPGP 文件格式 ( RFC-4880 ) 写入。这是一种相当复杂的格式,您甚至需要在开始解密数据之前对其进行解析。GnuPG 还会在加密数据之前对其进行压缩。它使用“OpenPGP 的密码反馈 (CFB) 模式变体”。虽然 iOS 5 支持 CFB,但这与 RFC-4880 不太一样。例如,它们不使用普通的 IV,而是以一种新颖的方式进行同步,以提供与标准 CFB 不兼容的“快速检查”。然后是他们的 String-to-Key (S2K) 算法,与 PBKDF2 不同。

简而言之,CommonCryptor 是将其分解为交给 AES 的一系列步骤中的最后一个。你可以看看 libgcrypt,但它的 LGPL 许可证通常与 iOS 开发不兼容。您可能应该调查其他 OpenPGP 实现。我知道 JavaScript 中有一些(这很疯狂,但仍然可以工作而不会造成许可问题)。也许是 Cryptlib(具有商业许可证)。

就个人而言,如果可以的话,我会选择其他一些加密器。OpenSSL 虽然不是特别安全,但非常便携,并且像命令行应用程序一样易于使用。RNCryptor可以在 iOS 上读写它。

于 2012-08-14T20:21:21.017 回答
1

您可以检查ObjectivePGP框架。

于 2013-10-09T14:29:00.597 回答