首先说明用Java自带的解析x509证书类,是不能解析sm2算法的证书,运行会抛出异常。
public byte[] getCSPK(byte[] csCert)
{
InputStream inStream = new ByteArrayInputStream(csCert);
ASN1Sequence seq = null;
ASN1InputStream aIn;
try
{
aIn = new ASN1InputStream(inStream);
seq = (ASN1Sequence)aIn.readObject();
X509CertificateStructure cert = new X509CertificateStructure(seq);
SubjectPublicKeyInfo subjectPublicKeyInfo = cert.getSubjectPublicKeyInfo();
DERBitString publicKeyData = subjectPublicKeyInfo.getPublicKeyData();
byte[] publicKey = publicKeyData.getEncoded();
byte[] encodedPublicKey = publicKey;
byte[] eP = new byte[64];
System.arraycopy(encodedPublicKey, 4, eP, 0, eP.length);
return eP;
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
用开源库bouncycastle可以解析、具体代码
{
InputStream inStream = new ByteArrayInputStream(csCert);
ASN1Sequence seq = null;
ASN1InputStream aIn;
try
{
aIn = new ASN1InputStream(inStream);
seq = (ASN1Sequence)aIn.readObject();
X509CertificateStructure cert = new X509CertificateStructure(seq);
SubjectPublicKeyInfo subjectPublicKeyInfo = cert.getSubjectPublicKeyInfo();
DERBitString publicKeyData = subjectPublicKeyInfo.getPublicKeyData();
byte[] publicKey = publicKeyData.getEncoded();
byte[] encodedPublicKey = publicKey;
byte[] eP = new byte[64];
System.arraycopy(encodedPublicKey, 4, eP, 0, eP.length);
return eP;
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
如有问题登录www.sitcoder.com留言