4

我在 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 位的整数?

谢谢,

4

3 回答 3

2

BER/DER 使用 2s 补码表示来编码整数值。这意味着第一位(不是字节)确定数字是正数还是负数。这意味着有时需要添加一个额外的前导零字节以防止第一位导致整数被解释为负数。请注意,前 9 位全为零是无效的 BER/DER。

于 2012-10-15T15:56:22.850 回答
0

是的你是对的。对于任何非负 DER/BER 编码INTEGER- 无论其长度如何 - 第一个有效负载字节的 MSB 为 0。

生成此类密钥的程序不正确。

于 2012-10-12T15:48:12.343 回答
0

“有符号约束”(实际上是一条规则)完全适用于任何大小的整数。但是,根据域的不同,您可能会在域对象的编码方式中发现各种奇怪之处。不幸的是,这是必须学习和解释的东西。

于 2012-10-13T01:54:00.530 回答