2012-01-24 8 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のコモンズコーデック「Base64」ですか? – home

答えて

9

X509Certificateには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オプションを試してみたいのですが、それはこのソフトウェアのもう1つの形式(Webにアプリケーションを移植しています)で行われているので、実際に作業を行う方法を変更したくないからです一緒に問題なく。 – user1084509

+0

あなたのコードは私を助けました!ありがとう@Voo – 0bj3ct

関連する問題