【问题标题】:PGP/GPG PHP encrypt-sign (using GnuPG) and Java decrypt-verify (using Bouncy Castle)PGP/GPG PHP 加密签名(使用 GnuPG)和 Java 解密验证(使用 Bouncy Castle)
【发布时间】:2020-09-30 19:43:17
【问题描述】:

我有一个客户期待 PGP 签名和加密数据。当我使用Java代码(使用bouncycastle openpgp)时,它能够在他端(客户端是Java)解密和验证发送的数据。

问题是我的软件是 PHP 的,我想使用 GnuPG 对数据进行签名和加密,如果我使用 GnuPG,我的客户端无法解密数据。

如果我只是用 PHP 加密数据,Java 可以毫无问题地解密。问题是当我在 PHP 中签署数据时,Java 无法解密和验证。

PHP 和 Java 之间的签名有什么已知问题吗?

我什至尝试过 Crypt_GPG,那里也遇到了完全相同的问题。

【问题讨论】:

    标签: java php encryption gnupg openpgp


    【解决方案1】:

    经过深入调查,有趣的事实出现了。

    原来我使用的私钥是罪魁祸首。我从某处得到的密钥显然是在https://pgpkeygen.com/ 在线生成的(切勿在生产环境中使用在线生成的密钥)

    该密钥包含一个主 RSA 密钥和两个子密钥(我不确定为什么 PGP 允许子密钥以及它在哪里有用)

    无论如何,问题是当 Java 使用主键对数据进行签名时。但是PHP使用了其中一个子密钥,java客户端的解密逻辑试图验证签名使用的是主密钥,因此无法成功验证。

    我使用命令行 gpg 工具编辑私钥并删除了额外的子键,然后 PHP 代码使用主键,因为这是该私钥中唯一可用的键,一切似乎都正常。

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2020-09-01
      • 2018-05-20
      • 1970-01-01
      • 2012-06-21
      • 2012-06-15
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多