我正在对LDAP客户机-服务器通信中的消息进行剖析,并且很难理解消息长度是如何计算的。
根据LDAP标准,在ASN.1中通信时,每条消息都以0x30 (ldap消息开始)开头,下面的字节应该是消息长度(或后面的数字或相关字节),直到有0x2和0x1发出消息ID的信号为止。
在短消息中,它可以如下所示:
0x30 (start),
0x3c (length),
0x2 (msg id..
0x1
0x1 ),
...在DEC中,长度是0x3c或简单的60,直到消息结束之前,以下字节数实际上是 60。
稍微长一点的消息可以如下所示:
0x30 (start),
0x81 (???),
0x8e (length),
0x2 (msg id..
0x1
0x1 ),
...在0x8e (或DEC中的142 ),但前一个字节意味着什么?
更长的消息如下所示:
0x30 (start),
0x82 (???),
0x2 (???),
0xe3 (???),
0x2 (msg id..
0x1
0x1 ),
...0x82、0x2或0xe3 (或DEC中的130、2或227 )都不是实际长度(实际上是739)
我看不出最后两个例子之间的逻辑。代码中的长度是如何表示的?
发布于 2017-10-29 12:28:53
在ASN.1中有两种编码长度的方法--定形和不定形。
对于确定的形式,如果长度小于128,则只使用单个字节,将高位设置为零。否则,高比特设置为1,低7位设置为长度长度。然后将长度编码成这么多字节(按大端顺序)。
0x82的高位数为1,其余比特等于2,这意味着以下2个字节包含长度(0x02E3 = 739)。
https://stackoverflow.com/questions/47000072
复制相似问题