使用 bouncy-gpg 和 PCKS12 密钥加密和解密

Encrypt and decrypt using bouncy-gpg and PCKS12 key

我在使用 bouncy-gpg 和 PCKS12 密钥实现加密和描述时遇到了问题。 现在我有了 PCKS12 密钥(扩展名:.p12)。从这个密钥,我可以得到 public 和私钥。 否则,bouncy-gpg 需要使用 gpg 密钥。 如何在 bouncy-gpg 中使用 p12 文件? 如果有任何建议,将不胜感激。 谢谢。

Meta: Stack 惯例是 post 代码作为文本格式化为代码,这意味着它必须在问题或答案中而不是评论中,因为评论不支持该格式。虽然我个人不太在意,但很多社区会抱怨图像 (1) 不能被想要解决你的问题的人剪切和粘贴,(2) 没有索引,(3) 没有视力受损的用户以及可能设备受限的用户无法访问。另外,约定是post问题中的问题,而不是评论中的问题,因为评论可以而且经常被删除得无影无踪。

更具体地说,我不明白你的意思是 this bouncy-gpg 而不是(只是)“BouncyCastle plus GPG”的更一般概念。这花了我更长的时间,因为我熟悉 BouncyCastle 的大部分内容,但对 bouncy-gpg 一点也不熟悉。也就是说,

又是 PGP 混淆私有和秘密的问题。 BouncyCastle的PGPPrivateKey在BouncyCastle中可用,但与外键不一样;由于历史原因,真正的私钥或子密钥的 PGP 格式被称为秘密(子)密钥,并且对应于 BouncyCastle 的 PGPSecretKey - 即使装甲时文件使用标签 PGP PRIVATE KEY BLOCK (!) 你从 PGPPrivateKey.getPrivateKeyPacket() 得到的根本不是真正的数据包,只是密码加密的密钥数据包的 部分 。要获得合适的数据包,您需要类似以下内容:

    // get prv,pub from the PKCS12 KeyStore as now
    JcaPGPKeyConverter cvt = new JcaPGPKeyConverter();
    PGPPublicKey pub2 = cvt.getPGPPublicKey(PGPPublicKey.RSA_GENERAL, pub, new Date());
    PGPPrivateKey prv2 = cvt.getPGPPrivateKey(pub2, prv);
    PGPSecretKey sec2 = new PGPSecretKey(prv2, pub2, null, true, null);
    // use pub2.getEncoded() and >>sec2.getEncoded()<<

就像查理布朗所说的那样,bleah!