Missing leading zeroes while retrieving serial num

2019-03-04 00:47发布

I'm trying to get serial number from a X.509 Cert.. When i compare the Serial number generated by my code with the actual serial number(on windows), leading zeroes of the actual serial number(of the X509 cert) are missing.

Any suggestions or alternative ways to get the serial number of the x.509 cert in hex with the leading zeroes??

Below is the code segment which I'm currently using:

InputStream in = new FileInputStream("cert");
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(in);
String serialNum = certificate.getSerialNumber().toString(16);
System.out.println(serialNum);

1条回答
戒情不戒烟
2楼-- · 2019-03-04 01:30

BigInteger has a toByteArray() method that re-adds the leading 00s:

byte[] serialNumBA = certificate.getSerialNumber().toByteArray()

Now you have several ways to convert the byte array to a hex string:

How to convert a byte array to a hex string in Java?

For example with Apache commons codec:

String serialNum = Hex.encodeHexString(serialNumBA);
查看更多
登录 后发表回答