我有一個以(可變長度)DER格式的X.509證書開頭的字節數組。如何從字節[]中提取X.509 DER證書?
證書之後有更多字節包含不相關的數據。
如何事先(我將使用Java)我只能從字節數組中提取屬於證書的字節?
我有一個以(可變長度)DER格式的X.509證書開頭的字節數組。如何從字節[]中提取X.509 DER證書?
證書之後有更多字節包含不相關的數據。
如何事先(我將使用Java)我只能從字節數組中提取屬於證書的字節?
證書必須使用區分編碼規則進行編碼,使用發現的ASN.1定義here。
首先讀取序列標籤(一個字節,檢查它是否有價值30
十六進制)。
現在解析DER長度字段。對於128以內的值,這被編碼爲單個字節。對於128到256的長度,將有兩個字節(十六進制爲81 XX
,其中XX爲無符號值)。然後你得到兩個字節,數值長度從256到64KiB,以十六進制編碼爲82 XX XX
,再次是大端無符號值。如果證書超過64KiB,即使您可以猜測下一個長度編碼,也可能會遇到麻煩。
所以現在你應該添加標籤長度(1),長度編碼的長度(可能是3字節)和值的長度在一起。這會給你整個證書的大小。將其讀入緩衝區或創建一些有界的輸入流並將其發送給工廠方法X509Certificate
。
快樂編碼。
注意:不要過度使用這種高效;證書通常比較小,沒有現代計算機會丟失幾個臨時緩衝區的KiB。 – 2014-09-29 23:40:09
謝謝你的洞察! – 2014-09-30 13:26:08
這是一個Java編碼問題。 – 2014-10-01 06:51:08
這個問題似乎是無關緊要的,因爲它純粹是關於編程,只與密碼學有間接關係。應該問[so]。 – Gilles 2014-10-01 07:16:45