当前位置: 首页 > 知识库问答 >
问题:

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

步胜
2023-03-14

是否可以使用JCE和/或BouncyCastle提供程序(不使用openssl包)解密加密的RSA(或其他的,不应该很重要)私钥?

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

通过Google,我可以使用PEMReader(来自BC openssl bundle)的示例,该示例应用了密码,但是-不想使用openssl bundle,也不一定想使用PEM格式,并且我可以使用PEMReader(来自provider bundle)解码PEM。问题是之后我能用它做什么。

我正在寻找一些大型函数,或者一系列的函数可以做到这一点,也就是说,我不是在研究解析加密密钥的ASN1,找出加密方法,通过密码传递输入等等。

共有1个答案

江德海
2023-03-14

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

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转换为常规字节数组。

 类似资料:
  • 我有一个类似于下面的私钥 例如。 我有下面的JWE数据,它是使用上面的私钥/证书生成的公钥加密的 有人能给我java代码,我可以用我的私钥解密这个JWE吗?我在网上找不到明确的答案。我对JWE这个概念很陌生

  • 问题内容: 我曾经生成过RSA密钥对。如果我没看错,那么KeyStore仅用于存储证书,而不用于存储密钥。如何将私钥正确存储在计算机上? 问题答案: 注意:此代码仅用于演示目的。将私钥存储在磁盘上时,必须对其进行加密。不要按原样使用它。 您可以执行以下操作: 保存功能: 并以相同的方式读回: 读取私钥相似。

  • 我找到了几个可以使用的解决方案。Net RSA Provider使用公钥对消息进行加密,并使用私钥对其解密。 但我想要的是用私钥加密,用公钥解密。 我希望在我的应用程序中存储公钥,并使用私钥加密许可证,例如在我的开发人员计算机上,将其发送到应用程序,并让信息使用公钥解密。 我怎样才能做到这一点?

  • 我找到了几种解决方案,在这些方案中,我可以使用RSA提供程序用公钥加密消息,并用私有密钥解密消息。 但我想要的是用私钥加密,用公钥解密。 我想将公钥存储在我的应用程序中,并用私钥在我的dev机器上加密一个许可证,将其发送到应用程序,并让信息用公钥解密。

  • 问题内容: 我需要用openssl生成的和密钥替换从Unix到Java代码的加密和解密步骤 我生成密钥 我在Unix中使用键(我需要在Java中执行) 这是我的尝试 但它不起作用,PKCS8EncodedKeySpec / X509EncodedKeySpec不正确…但是我不知道该放什么 问题答案: 我认为您在读取PEM文件时遇到问题。JPA不直接支持PEM格式。您有两种选择,要么将它们转换为DE

  • 我对RSA只有一些非常基本的理论知识。 在阅读不同来源的关于如何在实践中使用它的资料时,PKCS#1 OAEP似乎是一件好事。 对于测试实现,我使用Python和PyCrypto。例如,这是一个使用PKCS#1 OAEP的示例。 使用公钥加密,然后使用私钥解密,效果很好。例如,公众可以使用私钥向X个人发送一些数据。 从我对RSA工作原理的基本理解来看,我认为我可以交换公钥/私钥,也就是说,我可以使