繁体   English   中英

PGP/GPG PHP 加密签名(使用 GnuPG)和 Java 解密验证(使用 Bouncy Castle)

[英]PGP/GPG PHP encrypt-sign (using GnuPG) and Java decrypt-verify (using Bouncy Castle)

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

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

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

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

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

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

事实证明,我使用的私钥是罪魁祸首。 我从某个地方获得的密钥显然是在https://pgpkeygen.com/在线生成的(切勿使用在生产环境中在线生成的密钥)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM