java中私钥的提取

java中私钥的提取,java,private-key,Java,Private Key,我使用java类CertAndKeyGen和X500名称创建了证书,并且我能够生成字节数组中的证书。现在我需要我在证书中使用的私钥,并将其转换为可读格式。下面是我用来创建证书的代码 CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); X500Name x500Name = new X500Name(commonName, organizationalUnit, organization,

我使用java类CertAndKeyGen和X500名称创建了证书,并且我能够生成字节数组中的证书。现在我需要我在证书中使用的私钥,并将其转换为可读格式。下面是我用来创建证书的代码

    CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); 
    X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country);
    keypair.generate(keysize);
    PrivateKey privKey = keypair.getPrivateKey();
    PKCS10 certReq = keypair.getCertRequest(x500Name);
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = keypair.getSelfCertificate(x500Name, new Date(), (long) validity * 24 * 60 * 60);
    keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain);                    
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    PrintStream ps = new PrintStream(bs);
    certReq.print(ps);
    byte[] certReqPrintable = bs.toByteArray(); 

我没有任何线索,请帮助我朝正确的方向获取私钥并将其转换为可读格式。提前感谢。

如果要将私钥保存到文件,请使用

byte[] privateKeyBytes = privKey.getEncoded();
这将返回DER编码(二进制)格式的密钥

如果只想在控制台上显示包含的值,只需使用toString()打印即可:


BouncyCastle有一个有用的类,可用于将私钥写入PEM格式的文件(这是OpenSSH和curl等工具所期望的)

否则,您可以只保存私钥中的字节数组,这也是许多工具使用的DER格式

最后,您可以使用以下方法将其写入其他java程序使用的JKS密钥库:

KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null);
keyStore.setKeyEntry("some alias", privKey, somePassword.toCharArray(), chain[0]));
FileOutputStream fos = new FileOutputStream(filename);
keyStore.store(fos, somePassword.toCharArray());
fos.close();

你所说的可读性是什么意思?Base64?我不想用二进制格式。如果我打印它的私钥,它总是给我一些二进制格式,无法读取。你好,你能帮我这个线程吗
PEMWriter privatepemWriter = new PEMWriter(new FileWriter(filename)));
privatepemWriter.writeObject(privKey);
privatepemWriter.close();
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null);
keyStore.setKeyEntry("some alias", privKey, somePassword.toCharArray(), chain[0]));
FileOutputStream fos = new FileOutputStream(filename);
keyStore.store(fos, somePassword.toCharArray());
fos.close();