【问题标题】:Encrypt and decrypt using bouncy-gpg and PCKS12 key使用 bouncy-gpg 和 PCKS12 密钥进行加密和解密
【发布时间】:2021-02-03 19:50:36
【问题描述】:

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

【问题讨论】:

  • 假设您的意思是 PKCS12 和实现 PGP(不限于 GPG)的 bcpg,像往常一样将 p12 作为 JCA KeyStore 加载,然后使用 bcpg 的 JcaPGPKeyConverter
  • 感谢您的建议。我已将公钥转换为 PGP 公钥环。但是得到了一个不正确的 PGP 私钥环。

标签: java bouncycastle gnupg


【解决方案1】:

Meta:堆栈约定是将代码发布为格式化为代码的文本,这意味着它必须在问题或答案中而不是评论中,因为 cmets 不支持该格式。虽然我个人不太在意,但很多社区会抱怨图像 (1) 无法被想要解决您的问题的人剪切和粘贴,(2) 没有被索引,并且 (3) 没有t 视觉障碍用户以及可能设备受限的用户可以访问。另外,惯例是在问题中发布问题,而不是在 cmets 中,因为 cmets 可以并且经常被删除而没有任何痕迹。

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

又是 PGP 混淆了 private 和 secret。 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()<<

正如查理·布朗所说,哎呀!

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2017-02-19
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2020-04-23
    相关资源
    最近更新 更多