如何解密Java中的私钥(没有BC openssl)

时间:2015-08-31 07:32:43

标签: java encryption bouncycastle jce pkcs#8

是否可以使用JCE和/或BouncyCastle提供程序(不使用openssl bundle)解密加密的RSA(或其他,无所谓)私钥?

我可以使用PrivateKeyFactory读取未加密的密钥。

谷歌搜索这个让我通过使用PEMReader(来自BC openssl软件包)的示例,其中有一个密码应用于它,但是 - 不想使用openssl软件包,不一定要使用PEM格式,我可以使用PemReader(来自提供程序包)解码PEM。我之后可以用它做什么才是问题。

我正在寻找一些能够做到这一点的超级功能或一系列功能,即我不打算解析加密密钥的ASN1,找出加密方法,通过密码传递输入等等。

1 个答案:

答案 0 :(得分:2)

如果您有二进制格式的加密PKCS#8密钥(即不是PEM格式),则以下代码显示如何检索私钥:

public PrivateKey decryptKey(byte[] pkcs8Data, char[] password) throws Exception {
    PBEKeySpec pbeSpec = new PBEKeySpec(password);
    EncryptedPrivateKeyInfo pkinfo = new EncryptedPrivateKeyInfo(pkcs8Data);
    SecretKeyFactory skf = SecretKeyFactory.getInstance(pkinfo.getAlgName());
    Key secret = skf.generateSecret(pbeSpec);
    PKCS8EncodedKeySpec keySpec = pkinfo.getKeySpec(secret);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    return kf.generatePrivate(keySpec);
}

如果您有PEM格式,请删除标题(第一行),页脚(最后一行)以及将剩余内容从base64转换为常规字节数组。