是否可以使用JCE和/或BouncyCastle提供程序(不使用openssl bundle)解密加密的RSA(或其他,无所谓)私钥?
我可以使用PrivateKeyFactory读取未加密的密钥。
谷歌搜索这个让我通过使用PEMReader(来自BC openssl软件包)的示例,其中有一个密码应用于它,但是 - 不想使用openssl软件包,不一定要使用PEM格式,我可以使用PemReader(来自提供程序包)解码PEM。我之后可以用它做什么才是问题。
我正在寻找一些能够做到这一点的超级功能或一系列功能,即我不打算解析加密密钥的ASN1,找出加密方法,通过密码传递输入等等。
答案 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转换为常规字节数组。