如何使用Bouncy Castle解密PKCS8加密的私钥?

6
我正在尝试使用Bouncy Castle库解密一个PKCS8加密的私钥。我使用Bouncy Castle提供的PEMParser解析了包含私钥的文件。我得到了PKCS8EncryptedPrivateKeyInfo对象,但是我无法从中获取PrivateKeyInfo对象。在尝试解密时,我遇到了以下异常:
org.bouncycastle.pkcs.PKCSException: unable to read encrypted data: 1.2.840.113549.1.5.13 not available: No such provider: 1.2.840.113549.1.5.13
以下是我使用的代码:
PEMParser parser = new PEMParser(br);
PKCS8EncryptedPrivateKeyInfo pair =       (PKCS8EncryptedPrivateKeyInfo)parser.readObject();
JceOpenSSLPKCS8DecryptorProviderBuilder jce = new JceOpenSSLPKCS8DecryptorProviderBuilder();
                jce.setProvider("1.2.840.113549.1.5.13");
                InputDecryptorProvider decProv = jce.build(password.toCharArray());
                PrivateKeyInfo info = pair.decryptPrivateKeyInfo(decProv);

1
你看到这个了吗?https://dev59.com/NXE85IYBdhLWcg3wr1ux - psyched
2个回答

6

您尝试过使用 jce.setProvider("BC"); 而不是 jce.setProvider("1.2.840.113549.1.5.13"); 吗?

编辑以添加@PeterDettman提供的解决方案:

除了使用 jce.setProvider("BC"); 还需安装 BC 提供程序 bouncycastle.org/wiki/display/JA1/Provider+Installation


是的,我也尝试过那个。这是我得到的异常信息: org.bouncycastle.pkcs.PKCSException: 无法读取加密数据:1.2.840.113549.1.5.13不可用:没有这样的提供程序:BC。 - krk92
1
@krk92,一定要设置setProvider("BC")。你是否已经安装了BC提供程序?(http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation) - Peter Dettman
我没有安装BC提供程序。现在安装后它可以工作了。谢谢。 - krk92
不用客气。既然问题已经解决,请接受@christophe的答案。 - Peter Dettman
这对我也解决了问题。参考文献已经移动到 Github 仓库的 wiki 页面:https://github.com/bcgit/bc-java/wiki/Provider-Installation - blimmer

1

Security.addProvider(new BouncyCastleProvider());

这就是缺失的部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接