检索 x509 证书的序列号时缺少前导零

Missing leading zeroes while retrieving serial number of a x509 cert

我正在尝试从 X.509 证书中获取序列号。当我将我的代码生成的序列号与实际序列号(在 windows 上)进行比较时,实际序列号的前导零缺少(X509 证书的)序列号。

有任何建议或替代方法来获取带有前导零的十六进制 x.509 证书的序列号吗??

下面是我目前使用的代码段:

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);

BigInteger 有一个 toByteArray() 方法重新添加前导 00:

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

现在您有几种方法可以将字节数组转换为十六进制字符串:

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

例如使用 Apache 通用编解码器:

String serialNum = Hex.encodeHexString(serialNumBA);