2017-10-29 6 views
2

私はLDAPクライアントとサーバーの通信でメッセージを分析しており、メッセージの長さの計算方法を理解できません。 LDAP標準に基づくLDAPの長いメッセージ長の表現

、ASN.1で通信するときに各メッセージは0x30(LDAPメッセージスタート)で始まり、バイトはメッセージ長(又は数又は追従関連バイト)であるべきである以下アップ刚性あります0x2および0x1はメッセージIDを通知します。これは明らかです。

短いメッセージでは、それはこのような何かを見ることができます:

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

長さが0x3cまたは12月中に単に60、およびメッセージの終わりそれまでは、次のバイトの数であるとすると、実際に60でです。

少し長いメッセージは次のようになります。

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

の長さは正確に0x8e(またはDECでは142)ですが、前のバイトはどういう意味ですか?

さらに長いメッセージのようになります。0x820x2または0xe3もないと

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

(または130、12月中に2または227)実際の長さ(つまり、実際に739である)

私は最後の2つの例の間の論理を見ることができません。コードの長さはどのように表示されますか?

答えて

2

ASN.1での長さの符号化には、明確な形式と不定形式の2つの方法があります。

明確なフォームの場合、長さが128未満の場合は、1ビットを使用し、上位ビットはゼロに設定します。それ以外の場合、上位ビットは1に設定され、下位7ビットは長さに設定されます。その後、その長さは、その多くのバイトでエンコードされます(ビッグエンディアンの順序で)。

0x82は、上位ビットが1で残りのビットが2になります。これは、次の2バイトが長さ(0x02E3 = 739)を含むことを意味します。

+0

ありがとうございました。私が知りたかったのはそれです。 – toddddos