如何解决PGP / GPG PHP加密签名使用GnuPG和Java解密验证使用Bouncy Castle
我有一个客户,希望使用PGP签名和加密的数据。当我使用Java代码(使用bouncycastle openpgp)时,它可以解密并验证他端(客户端是Java)上发送的数据。
问题是我的软件在PHP中,我想使用GnuPG签名和加密数据,如果我使用GnuPG,则我的客户端无法解密数据。
如果我只是用PHP加密数据,则Java可以毫无问题地解密。问题是当我用PHP签名数据时,Java无法解密和验证。
我什至尝试了Crypt_GPG,那里也有完全相同的问题。
解决方法
经过深入调查,发现了有趣的事实。
原来,我使用的私钥是罪魁祸首。我从某个地方获得的密钥显然是在https://pgpkeygen.com/在线生成的(从不使用在生产环境中在线生成的密钥)
该密钥包含一个主RSA密钥和两个子密钥(我不确定为什么PGP允许子密钥以及在何处有用)
无论如何,问题在于Java在对数据进行签名时使用了主键。但是PHP使用了其中一个子密钥,因此Java客户端的解密逻辑试图验证签名是否使用主密钥,因此无法成功进行验证。
我使用命令行gpg工具编辑私钥,并删除了其他子密钥,然后PHP代码使用了主键,因为那是该私钥中唯一可用的密钥,并且一切正常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。