2012-03-19 56 views
2

我們有要求在項目中獲得「x509證書的公鑰」。我們使用x509Certificate.getPublicKey()API來獲取字節[],然後計算它的十六進制形式。例如,在Java中計算出證書的十六進制形式的公鑰以下如何將JAVA中的x509證書的公鑰轉換爲十六進制

30820122300d06092a864886f70d01010105000382010f003082010a0282010100af240808297a359e600caae74b3b4edc7cbc3c451cbb2be0fe2902f95708a364851527f5f1adc831895d22e82aaaa642b38ff8b955b7b1b74bb3fe8f7e0757ecef43db66621561cf600da4d8def8e0c362083d5413eb49ca59548526e52b8f1b9febf5a191c23349d843636a524bd28fe870514dd189697bc770f6b3dc1274db7b5d4b56d396bf1577a1b0f4a225f2af1c926718e5f40604ef90b9e400e4dd3ab519ff02baf43ceee08beb378becf4d7acf2f6f03dafdd759133191d1c40cb7424192193d914feac2a52c78fd50449e48d6347883c6983cbfe47bd2b7e4fc595ae0e9dd4d143c06773e314087ee53f9f73b8330acf5d3f3487968aee53e825150203010001

但是,當我們雙擊該證書並查看DET公鑰的價值苦惱的標籤,這是繼:

3082010a0282010100af240808297a359e600caae74b3b4edc7cbc3c451cbb2be0fe2902f95708a364851527f5f1adc831895d22e82aaaa642b38ff8b955b7b1b74bb3fe8f7e0757ecef43db66621561cf600da4d8def8e0c362083d5413eb49ca59548526e52b8f1b9febf5a191c23349d843636a524bd28fe870514dd189697bc770f6b3dc1274db7b5d4b56d396bf1577a1b0f4a225f2af1c926718e5f40604ef90b9e400e4dd3ab519ff02baf43ceee08beb378becf4d7acf2f6f03dafdd759133191d1c40cb7424192193d914feac2a52c78fd50449e48d6347883c6983cbfe47bd2b7e4fc595ae0e9dd4d143c06773e314087ee53f9f73b8330acf5d3f3487968aee53e825150203010001

我們所發現的是,通過Java API的計算值在開始時有額外的44個字符和從第45字符的數據是相同的Windows計算值。

可以任何機構,請幫助我確定如何計算與Windows計算相同的證書的公鑰。

謝謝。

+0

你在調用'getPublicKey()。getEncoded()'? – EJP 2012-03-19 09:12:03

回答

4

在X509證書的公鑰編碼爲ASN.1結構稱爲SubjectPublicKeyInfo看起來像這樣:

SubjectPublicKeyInfo ::= SEQUENCE { 
    algorithm   AlgorithmIdentifier, 
    subjectPublicKey  BIT STRING } 

該算法字段標識的種類鍵的(RSA,DSA,迪菲赫爾曼.. 。)並且位串包含編碼成取決於密鑰類型的結構的公鑰數據。

在您的情況下,第一個字節[]包含SubjectPublicKeyInfo的所有數據,包括頂級SEQUENCE標記,長度和algorithm字段以及subjectPublicKey字段。

第二個字節[]只包含第二個字段(即BIT STRING)。在你的例子中,這是一個RSA公鑰encoded with this structure

RSAPublicKey ::= SEQUENCE { 
    modulus   INTEGER, -- n 
    publicExponent  INTEGER } -- e 
+0

我剛剛面臨同樣的問題。我有一個證書,我neet打印公鑰十六進制。我試着使用'org.bouncycastle.asn1.x509.SubjectPublicKeyInfo'然後'keyInfo.getPublicKey'。它打印出我行:'#0343000440AD77104508F23AAE1D1D95222FB3F5E52FDADB8C393A0315FB4B362846DE7B00F47311AEB9AC00AA19346DFB7C56B193C01B867CD0A20B4D22A9D24DB0F634C4'。但是這個值與顯示Windows證書查看器的實際字符串有點不同。它在開始時有額外的'034300'。有任何想法嗎? – 2015-09-25 15:01:35

相關問題