使用java的X509序列号

使用java的X509序列号,java,security,x509certificate,x509,certificate,Java,Security,X509certificate,X509,Certificate,我需要从X509证书中获取一些数据 如果我在windows中打开证书文件,它将以这种格式显示其序列号 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证书中获取一些数据

如果我在windows中打开证书文件,它将以这种格式显示其序列号

ex. 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d 
我正试图使用java获取相同的数据。加载后,我使用

x509.getSerialNumber();
and result is : 76292708057987193002565060032465481997

那么这两者之间的区别是什么呢?我希望结果为上一个

第一个是证书的十六进制值。 另一个是十进制

现在,这取决于您如何将初始证书转换为bytearray以将其打印出来

假设这是您的证书:

byte[]cert={(字节)0xFD,(字节)0xB1,(字节)0xDD,,(字节)0x00};
BigInteger certVal=新的BigInteger(证书);
System.out.println(“结果是(十六进制):”+certVal.toString(16));

Windows显示序列号的十六进制表示形式,而Java从中返回一个
BigInteger
结果

要将
biginger
显示为十六进制值,只需调用
toString(16)

将输出:

396570ebd89f28204ec2a06b9848310d

我还将其转换为十六进制,但我的错误是将其转换为字节。i、 e.“76292708057987193002560600324654811997”;所以我得到了这个3736323932373038303537393837313933303032353635303630303332343353438313937。肯定是你救了我@Duncan,我试了3个小时。。。
396570ebd89f28204ec2a06b9848310d