【问题标题】:LDAP long message length representationLDAP 长消息长度表示
【发布时间】:2017-10-29 12:16:29
【问题描述】:

我正在剖析 LDAP 客户端-服务器通信中的消息,但无法理解消息长度的计算方式。

基于LDAP标准,在ASN.1中通信时,每条消息都以0x30开头(ldap message start),后面的字节应该是消息长度(或数字或相关字节)接下来) 直到有0x20x1 发出消息ID。这很清楚。

在短消息中,它可能看起来像这样:

0x30    (start),
0x3c    (length),
0x2     (msg id..
0x1
0x1     ),
...

长度为0x3c 或简单的60 在DEC 中,直到消息结束的后续字节数实际上是60。

稍长的消息可能如下所示:

0x30    (start),
0x81    (???),
0x8e    (length),
0x2     (msg id..
0x1
0x1     ),
...

长度又恰好在0x8e(或DEC 中的142),但是前一个字节是什么意思?

更长的消息看起来像这样:

0x30    (start),
0x82    (???),
0x2     (???),
0xe3    (???),
0x2     (msg id..
0x1
0x1     ),
...

0x820x20xe3(或 DEC 中的 1302227)都不是实际长度(实际上是 739)

我看不出最后两个例子之间的逻辑。代码中的长度如何表示?

【问题讨论】:

    标签: c++ ldap asn.1


    【解决方案1】:

    在 ASN.1 中有两种编码长度的方式 - 确定形式和不定形式。

    对于确定形式,如果长度小于 128,则只需使用单个字节,高位设置为零。否则,高位设置为 1,低七位设置为长度长度。然后将长度编码为那么多字节(按大端顺序)。

    0x82 的高位为 1,其余位等于 2,即后面的 2 个字节包含长度(0x02E3 = 739)。

    【讨论】:

    • 我明白了,谢谢,这正是我想知道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多