我需要从X509证书的一些数据。
如果我打开窗户,证书文件,其表示在这种格式的序列号。
ex. 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d
同样的数据,我想获得使用Java。 得到它加载后,我用
x509.getSerialNumber();
and result is : 76292708057987193002565060032465481997
那么究竟是什么这两个之间的区别? 我想要的结果作为上一个。
我需要从X509证书的一些数据。
如果我打开窗户,证书文件,其表示在这种格式的序列号。
ex. 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d
同样的数据,我想获得使用Java。 得到它加载后,我用
x509.getSerialNumber();
and result is : 76292708057987193002565060032465481997
那么究竟是什么这两个之间的区别? 我想要的结果作为上一个。
Windows显示该序列号的十六进制表示,而Java返回BigInteger
结果从X509Certificate.getSerialNumber()
要显示BigInteger
为十六进制值,只需要调用toString(16)
BigInteger bi = new BigInteger("76292708057987193002565060032465481997");
System.out.println(bi.toString(16));
将输出:
396570ebd89f28204ec2a06b9848310d
第一个是在证书的十六进制值。 另一种是小数。
现在,它取决于你如何转换初始证书的ByteArray打印出来。
比方说,这是你的证书:
byte[] cert = { (byte) 0xFD, (byte) 0xB1, (byte) 0xDD, ..., (byte) 0x00 };
BigInteger certVal = new BigInteger(cert);
System.out.println("And result is (hex): " + certVal.toString(16));