Java 使用bouncy gpg和PCKS12密钥加密和解密
我在使用bouncy gpg和PCKS12密钥实现加密和描述时遇到问题。 现在我有了PCKS12键(扩展名:.p12)。通过这个密钥,我可以获得公钥和私钥。 否则,弹性gpg需要使用gpg关键点。 如何在bouncy gpg中使用p12文件? 如果您有任何建议,我们将不胜感激。Java 使用bouncy gpg和PCKS12密钥加密和解密,java,bouncycastle,gnupg,Java,Bouncycastle,Gnupg,我在使用bouncy gpg和PCKS12密钥实现加密和描述时遇到问题。 现在我有了PCKS12键(扩展名:.p12)。通过这个密钥,我可以获得公钥和私钥。 否则,弹性gpg需要使用gpg关键点。 如何在bouncy gpg中使用p12文件? 如果您有任何建议,我们将不胜感激。 谢谢。Meta:Stack约定是将代码以文本格式发布为代码,这意味着它必须位于问题或答案中,而不是注释中,因为注释不支持这种格式。虽然我个人不太在意,但很多社区都会抱怨图像(1)无法被想要解决您问题的人剪切和粘贴,(2)
谢谢。Meta:Stack约定是将代码以文本格式发布为代码,这意味着它必须位于问题或答案中,而不是注释中,因为注释不支持这种格式。虽然我个人不太在意,但很多社区都会抱怨图像(1)无法被想要解决您问题的人剪切和粘贴,(2)无法识别,以及(3)视力受损的用户无法访问,可能还有那些设备有限的用户。此外,惯例是将问题发布在问题中,而不是在评论中,因为评论可以而且经常被删除而不留痕迹 更重要的是,我不明白你的意思不是(仅仅)更一般的“BouncyCastle+GPG”。这花了我更长的时间,因为我熟悉大多数BouncyCastle,但一点也不熟悉BouncyGPG。也就是说 这又是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()<<
//像现在一样从PKCS12密钥库获取prv、pub
JcaPGPKeyConverter cvt=新的JcaPGPKeyConverter();
PGPPublicKey pub2=cvt.getPGPPublicKey(PGPPublicKey.RSA_GENERAL,pub,new Date());
PGPPrivateKey prv2=cvt.getPGPPrivateKey(pub2,prv);
PGPSecretKey sec2=新的PGPSecretKey(prv2,pub2,null,true,null);
//使用pub2.getEncoded()和>>sec2.getEncoded()(假设您指的是PKCS12,以及实现PGP(不限于GPG)的bcpg),像往常一样将p12加载为JCA密钥库,然后使用bcpg感谢您的建议。我已将公钥转换为PGP公钥环。但是得到了一个不正确的PGP私钥环。谢谢,它工作得很好。