是否可以使用 JCE 和/或 BouncyCaSTLe 提供程序(不使用 openssl bundle )解密加密的 RSA(或其他,不重要)私钥?
我可以使用 PrivateKeyFactory 很好地读取未加密的 key 。
谷歌搜索这让我通过使用 PEMReader(来自 BC openssl bundle )的示例,它应用了密码,但是 - 不想使用 openssl bundle ,不一定想使用 PEM 格式,我可以使用 PemReader(来自提供程序包)解码 PEM。问题是之后我能用它做什么。
我正在寻找一些大型功能或一系列可以做到这一点的功能,即我不打算解析加密 key 的 ASN1、找出加密方法、通过密码传递输入等.
最佳答案
如果您有二进制格式的加密 PKCS#8 key (即不是 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 格式,请删除 header (第一行)、页脚(最后一行)并将剩余内容从 Base64 转换为常规字节数组。
关于java - 如何在Java中解密私钥(不使用BC openssl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306081/