虽然我无法对问题的细节给出彻底的解释,但这里有一个可行的解决方案。首先,不同的 PGP 实现似乎对使用哪个程序来生成正在使用的密钥非常敏感。
失败的场景:
- 在 PGP Desktop 中创建密钥(RSA v4、2048/2048)
- 在 BouncyCastle 中加密(DH/DSS、Elgamal)
- 登录 BouncyCastle(使用 RSA 密钥)
- 在 PGP Desktop 中解密和签名验证成功。
- 在 McAfee Business Server 中解密成功但签名验证失败。
为了使 McAfee Business Server 成功验证密钥,请使用 BouncyCastle 源代码中的代码在 BouncyCastle 中创建密钥。(Org.BouncyCastle.Bcpg.OpenPgp.Examples.RsaKeyRingGenerator) 如果您需要特定密钥,可以更改此代码特性。
另一种选择是使用 McAfee Business Server 生成密钥。为此,您需要访问该软件。我使用试用版进行了测试。(顺便说一句,起床和跑步时脖子很痛)
更新:我在 E-Business Server 8.5.3(试用版)上进行了所有测试。我达到了可以加密和登录 Bounty 并在 E-Business Server 中解密和验证的地步。结果第三方正在使用拒绝验证签名的 E-Business Server 7.0。为了让一切正常工作,我们需要创建 V3 签名。
我们从:
PgpSignatureGenerator pgpSignatureGenerator = new PgpSignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
到
PgpV3SignatureGenerator pgpV3SignatureGenerator = new PgpV3SignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);