当前位置: 首页 > 知识库问答 >
问题:

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

山阳辉
2023-03-14

我对使用bouncy-gpg和PCKS12密钥的加密和描述的实现有麻烦。现在我有了PCKS12密钥(扩展名:.p12)。从这个密钥,我能够获得公钥和私钥。否则,bouncy-gpg需要使用gpg密钥。如何在bouncy-gpg中使用p12文件?如果有任何建议,我将不胜感激。多谢了。

共有1个答案

李弘光
2023-03-14

堆栈约定是将代码作为格式化为代码的文本发布,这意味着它必须在问题或答案中,而不是注释中,因为注释不支持这种格式。虽然我个人不太关心,但社区中的很多人会抱怨图像(1)不能被想要解决你的问题的人剪切和粘贴,(2)没有索引,(3)视力受损的用户无法访问,可能还有那些设备有限的用户。另外,惯例是将问题贴在问题中,而不是贴在评论中,因为评论可以而且经常被删除而不留痕迹。

更实质的是,我不理解你特别指的是这个bouncy-gpg而不是(仅仅)更一般的“BouncyCastle加GPG”的概念。这花了我更长的时间,因为我对BouncyCastle很熟悉,但对Bouncy-GPG一点也不熟悉。话虽如此,

又是PGP私与密的混淆。BouncyCastle的PGPPrivateKey可以在BouncyCastle中使用,但它与外部密钥不同;由于历史原因,实际上是私钥或子密钥的PGP格式被称为秘密(子)密钥,并且与BouncyCastle的PGPSecretKey相对应--即使文件在装甲时使用标签PGP私钥块(!)您从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()<<

就像查理·布朗会说的,巴耶!

 类似资料:
  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 我们使用Azure Key Vault加密和解密Blob,以保护我们的文件不受开发人员或任何不想要的访问。 我创建了如下所示的RSA密钥 现在我很少怀疑了

  • 虽然类提供了方法来确定公钥的算法是否可用于加密目的(,,,),但仅此一项不足以选择有效的加密子密钥。 如GnuPG packet.h中所示,存在关于数据包中存储的公钥的预期用法的信息: 我的问题是,鉴于Bouncy Castle不公开这些标志,在Java中从一个PublicKeyPacket中提取这个密钥使用信息的建议方法是什么?

  • 我被告知,对于非对称密码学,您使用公钥加密明文,并使用私钥解密明文。所以我尝试了以下方法: 以及加密和解密函数 我希望控制台显示,但它显示的是这个。我是否错误地使用了RSACryptoServiceProvider?

  • 我有一个全新的Linux Mint14安装。已安装Thunderbird&Enigmail。 我试着删除我的密钥并重新移植它。我试着改变各种设置。但我想不出问题出在哪里。我以前使用过Linux/Thunderbird/Enigmail,从来没有出现过这个错误。