java - 将 .der 文件中的私钥导出为 PKCS#1

标签 java bouncycastle pkcs#8 pkcs#1

我正在编写一个java代码来生成 key 并将它们保存在文件中,我正在使用BouncyCaSTLe库使用pemwriter将私钥写入.pem文件(如果它在PKCS#1中)并使用常规 FileOutputStream 将其导出到 PKCS#8。

现在,当导出到 DER 时,尝试将其导出到 PKCS#1 时就会出现问题。

我搜索了很多,但找不到合适的方法来编码 PKCS#1 中的私钥或将 java 私钥 (PKCS#8) 的常规编码转换为 PKCS#1,或者您是否可以指导我转换 PrivateKeyRSAPrivateKeyDSAPrivateKeyECPrivateKey。这是我要导出的代码片段

        JcePEMEncryptorBuilder builder = new JcePEMEncryptorBuilder("DES-EDE3-CBC");
        PEMEncryptor enc = builder.build(password);

        FileOutputStream fis = new FileOutputStream(new File(privatekey.der));
        if (isPKCS8) {
            if (!encrypt) {
                fis.write(privateKeyBytes);
            } else {
                fis.write(enc.encrypt(privateKeyBytes));
            }
       fis.flush();
       fis.close(); 

其中 privateKeyBytes 是 PrivateKey.getEncoded() 返回的字节。 它们位于 PKCS#8 中,如果我可以将 PrivateKey 转换为 RSAPrivateKey 或 DSAPrivateKey,它们代表 PKCS# 中的私钥1格式

最佳答案

显然您可以使用类型信息并执行类转换

   PrivateKey privKey = ...;
   if (privKey instance of RSAPrivateKey) {
       RSAPrivateKey rsaPrivKey = (RSAPrivateKey)privKey;
   if (privKey instance of DSAPrivateKey) {
       DSAPrivateKey dsaPrivKey = (DSAPrivateKey)privKey;
   if (privKey instance of ECPrivateKey) {
       ECPrivateKey ecPrivKey = (ECPrivateKey)privKey;
   }

关于java - 将 .der 文件中的私钥导出为 PKCS#1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451728/

相关文章:

java - 关于Java中基数排序实现的问题

grails - 在Grails 2.5.0中找不到BouncyCaSTLeProvider类

android - 从 Base64 编码的 ASN1 结构中解码 PKCS8 key 是否容错?

javascript - 不同的 AES 实现不一致

java - 使用 Java 解密 OpenSSL PEM 编码的 RSA 私钥?

java - 从 PKCS8 编码数据创建任何 PrivateKey 实例(RSA 或 DSA 或 EC)

java - 如何读取.pem文件来获取私钥和​​公钥

java - 将包含 size_t 的结构从 Java 传递到 OpenCL

java - 在另一个字符串中替换最后一次出现的字符串

mac终端下javac命令输出乱码