簡體   English   中英

將x509Certificate轉換為byte []並反轉

[英]Convert x509Certificate into byte[] and reverse

我將X509Certificate轉換為byte []或String,然后從byte獲得X509Certificate。 我已經使用了這段代碼

X509Certificate x509cert=Helper.saveCertificate(workgroupId, serialNumber);


//x509 to byte[]
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);   
out.writeObject(x509cert);
CertificateSerialization certificateSerialization=new CertificateSerialization();
certificateSerialization.setCertificateByte(bos.toByteArray()); 
bos.close();
return handleResult(certificateSerialization);

並通過以下方法恢復它:

byte[] x509cert=certificateSerialization.getCertificateByte();

//from byte to x509
ByteArrayInputStream bis = new ByteArrayInputStream(x509cert);
ObjectInput in = new ObjectInputStream(bis);
X509Certificate cert = (X509Certificate) in.readObject(); 
bis.close();
response.setResult(cert);

但是當我分析返回的x509時,這與原始證書有所不同。 您認為有錯誤嗎? 提前致謝

使用String我已經解決了我的問題,尤其是我使用了以下代碼:將x509Certificate轉換為String

Base64 encoder = new Base64(64);
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
String end_cert = "-----END CERTIFICATE-----";      
byte[] derCert = x509cert.getEncoded();
String pemCertPre = new String(encoder.encode(derCert));
String pemCert = cert_begin + pemCertPre + end_cert;
return pemCert;

將此字符串轉換為x509時:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
String pem=//PEM STRING
X509Certificate cert = null;
StringReader reader = new StringReader(pem);
PEMReader pr = new PEMReader(reader);
cert = (X509Certificate)pr.readObject();
pr.close();

使用X509Certificate.getEncoded()

byte[] java.security.cert.Certificate.getEncoded() throws CertificateEncodingException

getEncoded()返回此證書的編碼形式。 假定每種證書類型僅具有一種編碼形式; 例如,X.509證書將被編碼為ASN.1 DER。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM