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

如何在Java中解密私钥(没有BC openssl),java,encryption,bouncycastle,jce,pkcs#8,Java,Encryption,Bouncycastle,Jce,Pkcs#8,使用JCE和/或BouncyCastle提供程序(不使用openssl捆绑包)可以解密加密的RSA或其他密钥吗 我可以用PrivateKeyFactory读取未加密的密钥 通过谷歌搜索,我了解了使用BC openssl捆绑包中的PEMReader的示例,该捆绑包应用了密码,但是-不想使用openssl捆绑包,不一定要使用PEM格式,我可以使用提供者捆绑包中的PEMReader对PEM进行解码。问题是以后我能用它做什么 我在寻找一些超级函数,或者一系列可以实现这一点的函数,也就是说,我不想解析加密

使用JCE和/或BouncyCastle提供程序(不使用openssl捆绑包)可以解密加密的RSA或其他密钥吗

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

通过谷歌搜索,我了解了使用BC openssl捆绑包中的PEMReader的示例,该捆绑包应用了密码,但是-不想使用openssl捆绑包,不一定要使用PEM格式,我可以使用提供者捆绑包中的PEMReader对PEM进行解码。问题是以后我能用它做什么


我在寻找一些超级函数,或者一系列可以实现这一点的函数,也就是说,我不想解析加密密钥的ASN1,找出加密方法,通过密码传递输入,等等。

如果您有二进制格式的加密PKCS8密钥,即不是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格式,请删除标题的第一行,页脚最后一行et将剩余内容从base64转换为常规字节数组。

您可以解密使用Java支持的密码加密的Java中的任何内容。您是否使用密码保护密钥存储中的密钥?在解密私钥pem string Java.io.IOException:ObjectIdentifier-数据不是对象ID标记=48