2014-09-29 84 views
0

我有一個以(可變長度)DER格式的X.509證書開頭的字節數組。如何從字節[]中提取X.509 DER證書?

證書之後有更多字節包含不相關的數據。

如何事先(我將使用Java)我只能從字節數組中提取屬於證書的字節?

+0

這是一個Java編碼問題。 – 2014-10-01 06:51:08

+2

這個問題似乎是無關緊要的,因爲它純粹是關於編程,只與密碼學有間接關係。應該問[so]。 – Gilles 2014-10-01 07:16:45

回答

3

證書必須使用區分編碼規則進行編碼,使用發現的ASN.1定義here

首先讀取序列標籤(一個字節,檢查它是否有價值30十六進制)。

現在解析DER長度字段。對於128以內的值,這被編碼爲單個字節。對於128到256的長度,將有兩個字節(十六進制爲81 XX,其中XX爲無符號值)。然後你得到兩個字節,數值長度從256到64KiB,以十六進制編碼爲82 XX XX,再次是大端無符號值。如果證書超過64KiB,即使您可以猜測下一個長度編碼,也可能會遇到麻煩。

所以現在你應該添加標籤長度(1),長度編碼的長度(可能是3字節)和值的長度在一起。這會給你整個證書的大小。將其讀入緩衝區或創建一些有界的輸入流並將其發送給工廠方法X509Certificate

快樂編碼。

+0

注意:不要過度使用這種高效;證書通常比較小,沒有現代計算機會丟失幾個臨時緩衝區的KiB。 – 2014-09-29 23:40:09

+0

謝謝你的洞察! – 2014-09-30 13:26:08