2012-01-24 100 views
2

我有一個X509 Certificate,我想將它存儲在MySQL DB而不是保存該文件。因此,我認爲最好將證書轉換爲base64並存儲它。我已經完成了這個轉換的前進和後退,但是我沒有得到真正的結果。無法將X509證書轉換爲Base64

我使用javax.security.cert.X509Certificate並導入org.apache.commons.codec.binary.Base64如下:

X509Certificate cert = X509Certificate.getInstance(new FileInputStream(certFile)); 
System.out.println("Vigencia: "+cert.getNotAfter()); 
System.out.println("Inicio: "+cert.getNotBefore()); 
String cert64 = bytes2String(Base64.encodeBase64(cert.toString().getBytes("UTF-8"))); 
System.out.println("Cert 64: "+ cert64); 
String certRegreso = bytes2String(Base64.decodeBase64(cert64.getBytes())); 
System.out.println("Cert Regreso: "+ certRegreso); 
X509Certificate certNuevo = X509Certificate.getInstance(certRegreso.getBytes()); 
+0

它是Apache的commons codec'Base64'嗎? – home

回答

9

根據x509證書實現Serializable那麼爲什麼不使用更簡單的解決方案,它存儲爲一個字節數組的javadoc?例如:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutput out = new ObjectOutputStream(bos); 
out.writeObject(certificate); 
byte[] data = bos.toByteArray(); 
bos.close(); 

現在只是將字節數組存儲爲blob。要重新創建它,你可以使用:

ByteArrayIntputSream bis = new ByteArrayInputStream(byteData); 
ObjectInput in = new ObjectInputStream(bis); 
X509Certificate cert = (X509Certificate) in.readObject(); 
bis.close(); 
+0

問題是,我想首先嚐試Base64選項,因爲這是以另一種形式的此軟件完成的方式(即將應用程序移植到Web),所以我不想改變它的工作方式以便它們可以工作一起沒有任何問題。 – user1084509

+0

您的代碼幫助了我!謝謝@Voo – 0bj3ct