我是BouncyCastle的新手。我有一个使用以下代码生成的私钥。
final CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
keypair.generate(1024);
final PrivateKey privKey = keypair.getPrivateKey();
我会使用AES或使用BouncyCastle的一些openssl支持算法使用密码对其进行加密。有人可以帮助我如何开始,在那里我找不到任何好的教程。请帮帮我。提前谢谢。
答案 0 :(得分:4)
如果您只想将私钥输出到密码“12345”受保护的PEM格式化并且文件“privatekey.pem”,您可以使用此BC代码:
JceOpenSSLPKCS8EncryptorBuilder encryptorBuilder = new JceOpenSSLPKCS8EncryptorBuilder(PKCS8Generator.PBE_SHA1_3DES); encryptorBuilder.setRandom(EntropySource.getSecureRandom()); encryptorBuilder.setPasssword("12345".toCharArray()); OutputEncryptor oe = encryptorBuilder.build(); JcaPKCS8Generator gen = new JcaPKCS8Generator(privKey,oe); PemObject obj = gen.generate(); PEMWriter pemWrt = new PEMWriter( new FileWriter("privatekey.pem")); pemWrt.writeObject(obj); pemWrt.close();
然后你可以使用openssl和
获取私钥$ openssl rsa -in privatekey.pem -check Enter pass phrase for privatekey.pem: RSA key ok writing RSA key -----BEGIN RSA PRIVATE KEY----- ..... -----END RSA PRIVATE KEY-----
PEMWriter的“标准”使用不会密码保护您的私钥:(
答案 1 :(得分:0)
如果您希望使用AES-256而不是PKCS8支持的旧DES变体之一来保护私钥,那么它将起作用:
public String toPem(String password) throws IOException {
StringWriter sw = new StringWriter();
try (JcaPEMWriter pemWriter = new JcaPEMWriter(sw)) {
PEMEncryptor encryptor =
new JcePEMEncryptorBuilder("AES-256-CBC").build(password);
// privateKey is a java.security.PrivateKey
JcaMiscPEMGenerator gen = new JcaMiscPEMGenerator(privateKey, encryptor);
pemWriter.writeObject(gen);
}
return sw.toString();
}
您可以使用openssl验证输出。在我的情况下,密钥是EC,因此使用此命令:
$ openssl ec -in key.txt -passin pass:password -text
根据RSA密钥的要求进行调整。