2012-09-25 50 views
9

我需要從X509證書中獲取一些數據。使用java的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 

那麼這兩者之間有什麼區別?我希望結果如上。

回答

17

Windows顯示該序列號的十六進制表示,而Java返回從X509Certificate.getSerialNumber()一個BigInteger結果。

要將BigInteger顯示爲十六進制值,請致電toString(16)

BigInteger bi = new BigInteger("76292708057987193002565060032465481997"); 
System.out.println(bi.toString(16)); 

將輸出:

396570ebd89f28204ec2a06b9848310d 
+0

我也將其轉換爲十六進制,但我的錯誤是把它轉換成字節。 即**「76292708057987193002565060032465481997」 .getBytes(); **所以我得到這個 3736323932373038303537393837313933303032353635303630303332343635343831393937. 肯定你救了我@Duncan,我試着3小時... –

2

第一個是證書的十六進制值。 另一個是小數。

現在它取決於你如何轉換初始證書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));