iOS环境中的GNUPG解密

时间:2012-08-14 18:54:52

标签: ios aes gnupg

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

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

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

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

2 个答案:

答案 0 :(得分: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上读取和写入。

答案 1 :(得分:1)

您可以查看ObjectivePGP框架。