JAVA:如何使用密码保护将私钥保存在pem文件中

 sdfqw4543gf 发布于 2023-01-06 19:46

我试图将私钥保存在一个pem受密码保护的文件中.问题是,pem文件已创建,我甚至可以用openssl打开它,但是没有密码问题!

这是代码:

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(2048);
KeyPair keypair = keygen.generateKeyPair();

PrivateKey privKey = keypair.getPrivate();

PKCS8Generator encryptorBuilder = new PKCS8Generator(privKey);
encryptorBuilder.setPassword("testing".toCharArray());
PEMWriter writer = new PEMWriter(new FileWriter(new File("pk.pem")));
PemObject obj = encryptorBuilder.generate();

writer.writeObject(obj);
writer.flush();
writer.close();

执行后,我尝试打开pk.pem文件

openssl rsa -in pk.pem -check

它给出了:

RSA key ok
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
(... some key appears here ...)
-----END RSA PRIVATE KEY-----

在访问私钥之前,有人要求输入密码!有人可以帮帮我吗?

1 个回答
  • 那么你应该仔细阅读BouncyCastle文档.它声明了您使用的构造函数:

    // Constructor for an unencrypted private key PEM object.
    PKCS8Generator(java.security.PrivateKey key)
    
    // Constructor for an encrypted private key PEM object.
    PKCS8Generator(java.security.PrivateKey key, java.lang.String algorithm, java.lang.String provider)
    

    因此,您正在使用构造函数来创建未加密的PKCS8Generator实例.您设置的密码无效.

    根据文档使用其他构造函数之一来创建加密实例.

    注意:问题中的代码需要过时版本的BouncyCastle(1.4x?),因为当前版本(1.5x)具有不同的构造函数,与本答案中提供的版本不兼容.


    对于较新的版本,请使用:

    import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
    
    JcaPEMWriter writer = new JcaPEMWriter(new PrintWriter(System.out));
    writer.writeObject(sk);
    writer.close();
    

    当然可能会替换PrintWriter其他任何东西Writer.

    2023-01-06 19:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有