2013-07-13 59 views
1

我正在使用java.security.cert.X509Certificate通過SSL套接字獲取SSL證書。但X509Certificate將證書的序列號作爲BigInteger對象返回。我想要的是以冒號分隔值格式的序列號(類似於我們在瀏覽器中查看證書詳細信息時看到的內容)。我們如何做到這一點?BigInteger到十六進制冒號表示法

我試過toString(16),但在我的序列號中仍然沒有冒號。

請幫忙。

回答

4

可以插入每個組的後兩位數字冒號用一個簡單的正則表達式,如下所示:

String res = orig.replaceAll("(?<=..)(..)", ":$1") 

該表達式相匹配的兩個字符組,並插入在各組的前一個冒號除了第一個。

這裏是一個demo on ideone

+0

感謝您的回覆。我試過這種方法,它似乎工作正常,但我有一個小問題。我的BigInteger.toString()返回值爲17796998956082362239,根據代碼serialNo.toString(16).toUpperCase()。replaceAll(「(?<= ..)(..)」,「:$ 1」)返回F6:FB:A4:42:0D:49:77:7F,但證書的瀏覽器版本在前面有00。即00:F6:FB:A4:42:0D:49:77:7F。這可以有 –

+0

@AkhilAchuthan它取決於你對你的字符串的使用。你的結果有64位,他們的結果是 - 有8位前導零的72位。如果您必須匹配他們的結果,您可以隨時在您的號碼中加上「00:」前綴。 – dasblinkenlight