2012-06-14 77 views
2

我有使用java類CertAndKeyGen和X500Name創建的證書,我能夠生成字節數組中的證書。現在我想要我在證書中使用的私鑰並將其轉換爲可讀格式。下面是我用來創建證書的代碼,在java中提取私鑰

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(); 

我有沒有線索,請幫我在正確的方向去獲得私有密鑰並將其轉換成可讀的格式。提前致謝。

+3

你是什麼可讀的意思嗎? Base64編碼? – Anton

+0

我不想成爲二進制格式。如果我打印的是私鑰,它總是以一些不可讀的二進制格式給我。 – Mojoy

回答

1

如果你想保存私鑰文件使用

byte[] privateKeyBytes = privKey.getEncoded(); 

這將返回編碼(二進制)格式DER的關鍵。

如果你只想顯示包含的值在控制檯中使用的toString()只打印:

System.out.println(privKey); 
+0

你好,你能幫我這個線程http://stackoverflow.com/q/18375813/1503130 – Prateek

1

BouncyCastle的具有有用PEMWriter類,你可以用它來寫私鑰文件以PEM格式(這是OpenSSH和curl期望的工具)。

PEMWriter privatepemWriter = new PEMWriter(new FileWriter(filename))); 
privatepemWriter.writeObject(privKey); 
privatepemWriter.close(); 

否則,你可以保存從許多工具也使用的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();