我正在尝试从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);
答案 0 :(得分:1)
BigInteger
有toByteArray()
方法重新添加前导00:
byte[] serialNumBA = certificate.getSerialNumber().toByteArray()
现在有几种方法可以将字节数组转换为十六进制字符串:
How to convert a byte array to a hex string in Java?
例如使用Apache commons编解码器:
String serialNum = Hex.encodeHexString(serialNumBA);