2012-10-12 89 views
2

大的整數,當我發現整數的ASN.1 編碼要求多次提到和整數固有簽署對象怪異編碼使用ASN.1

TLV 02 02 0123爲〔實施例。

然而,我有一個256位的整數(一個證書內)編碼的 30 82 01 09 02 82 01 00 D1 A5 xx月xx XX ... 02 03 010001

30開始 82 2字節長度 0109 265字節

02整數 82 2字節長度 0100 256字節 D1 A5 XXXX

的d1是令人不安的一部分,因爲前導位是1,這意味着該256位的數目是有符號時,我事實上它是一個無符號數字,事實上是一個公共的rsa鍵。簽名約束是否適用於整數> 64位?

謝謝,

+0

是的,這是錯誤的,但在實際的證書中很常見。 –

回答

0

是的,你是對的。對於任何非負DER/BER編碼的INTEGER - 無論其長度如何 - 第一個有效負載字節的MSB爲0.

生成此類密鑰的程序不正確。

0

「有符號約束」(實際上是一條規則)完全適用於任何大小的整數。但是,根據域,您可能會發現域對象編碼方式中存在各種各樣的怪異現象。不幸的是,這是必須學習和解決的難題。

1

BER/DER使用二進制補碼錶示法來編碼整數值。這意味着第一位(不是字節)決定了一個數字是正數還是負數。這意味着有時需要添加額外的前導零字節,以防止第一位導致整數被解釋爲負數。請注意,前9位全爲零是錯誤的BER/DER。