我正在尝试将私钥保存在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-----
假设在访问私钥之前要求输入密码! 有人可以帮助我吗?
答案 0 :(得分:6)
那么你应该仔细阅读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
。