Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用bouncy gpg和PCKS12密钥加密和解密_Java_Bouncycastle_Gnupg - Fatal编程技术网

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

Java 使用bouncy gpg和PCKS12密钥加密和解密,java,bouncycastle,gnupg,Java,Bouncycastle,Gnupg,我在使用bouncy gpg和PCKS12密钥实现加密和描述时遇到问题。 现在我有了PCKS12键(扩展名:.p12)。通过这个密钥,我可以获得公钥和私钥。 否则,弹性gpg需要使用gpg关键点。 如何在bouncy gpg中使用p12文件? 如果您有任何建议,我们将不胜感激。 谢谢。Meta:Stack约定是将代码以文本格式发布为代码,这意味着它必须位于问题或答案中,而不是注释中,因为注释不支持这种格式。虽然我个人不太在意,但很多社区都会抱怨图像(1)无法被想要解决您问题的人剪切和粘贴,(2)

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

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私钥环。谢谢,它工作得很好。