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

如何使用JCA读取BouncyCastle私钥PEM文件?[复制]

施默
2023-03-14

在我们的一个应用程序中,私钥使用BouncyCastle的PEMWriter存储。目前,我正在研究我们是否可以摆脱BouncyCastle依赖关系,因为Java7似乎拥有我们需要的一切。唯一的问题是我不能读取存储在数据库中的私钥作为PEM编码的字符串(证书/公钥很好)。

如果我将PEM编码的私钥字符串从数据库保存到一个文件中,我可以运行OpenSSL将密钥转换为PKCS#8格式,如下所示:

openssl pkcs8 -topk8 -inform PEM -outform DER \
              -in private_key.pem -out private_key.der -nocrypt

我可以使用这段Java/JCA代码对结果进行base64编码,然后读取:

byte[] privateKeyBytes = 
           DatatypeConverter.parseBase64Binary(privateKeyDERcontents);
PrivateKey prKey = 
           KeyFactory.getInstance("RSA").
               generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));

这个私钥与预期存储的公钥相匹配,即我可以从明文到密文来回往返。

我的问题是:我能否以某种方式直接读取原始的PEM编码?

编辑

下面是使用BouncyCastle读取相关字符串的代码:

if (Security.getProvider("BC") == null) {
    Security.addProvider(new BouncyCastleProvider());
}
PEMReader pemReader = new PEMReader(new StringReader(privateKeyPEM));
KeyPair keyPair = (KeyPair) pemReader.readObject();
PrivateKey key = keyPair.getPrivate();

“Private ateKeyPEM”是数据库中的PEM编码字符串,否则这个示例是自包含的。有趣的是,它已经使用JCA KeyPair对象作为输出。换句话说,我最初的问题是:我能在不依赖PEMReader(以及相当多的其他BouncyCastle类)的情况下完成上述代码的等效操作吗?

共有1个答案

东方志尚
2023-03-14

PEM文件中的密钥已经存储在PKCS#8格式中,所以如果没有使用密码加密,您可以删除标题 (-----BEGIN RSA PRIVATE KEY-----), Base64解码输入,并获取所需的字节。

 类似资料:
  • 我有JJWT库集成的java项目。现在我有一个。PEM文件,其中包含我的RSA私钥。我如何读取。PEM文件并使用库获取私钥?

  • 我在使用Java Bouncycastle的客户机和使用Python RSA库的密钥服务器之间交换私钥时遇到了困难。PEM格式用于通过REST传输密钥。keyserver无法解密我提供的密钥(加密密码更改时需要),它需要PKCS#1或PKCS#8密钥和PEM,如下所示: 但是BouncyCastle的输出(使用JCEpeEncryptorBuilder和JcaMiscPEMGenerator)的起

  • 给定这个文件(使用openssl生成并使用密码加密): 如何在Java中获得一个< code>PrivateKey对象?我编写了以下代码,但是我找不到获取< code>KeySpec的正确方法: 我想我应该构建一个<code>RSAPrivateKeySpec</code>,但我不知道怎么做。我尝试了这个答案和另一个答案中的方法,但在解析字节数组时,它们都会导致错误。

  • 问题内容: 该BouncyCastle的加密API允许创建和使用的常规验证数字签名包对象,如,和它们的容器。 假设我使用OpenSSL创建一个.pem(或更简单的话是一个.der文件),其中包含要在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样: 如何使用BouncyCastle API获取同时包含此私钥和相应公钥的? 请注意,我要使用BouncyCastle 1.50(在撰写本文时为最新)中

  • BouncyCastle加密API允许使用常规的<code>java创建和验证数字签名。安全性包对象,如,及其容器<code>java.security.KeyPair。 假设我使用OpenSSL创建了一个. pem(或者更简单的. der文件),其中包含了我希望在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样: 我如何使用BouncyCastle APIs来获取包含此私钥和相应公钥的< co

  • 以前有人这么做过吗?谢谢