我试图将私钥保存在一个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-----
在访问私钥之前,有人要求输入密码!有人可以帮帮我吗?
那么你应该仔细阅读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
.