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

How to decrypt a private key in Java (without BC openssl)

是否可以使用 JCE and/or BouncyCastle 提供程序(不使用 openssl 包)解密加密的 RSA(或其他,无关紧要)私钥?

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

谷歌搜索让我了解了使用应用了密码的 PEMReader(来自 BC openssl bundle)的示例,但是 - 不想使用 openssl bundle,不一定想使用 PEM 格式,并且我可以使用 PemReader(来自提供商包)解码 PEM。问题是之后我能用它做什么。

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

如果您有二进制格式的加密 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 转换为常规字节数组。