2017-10-29 16 views
2

LDAP 클라이언트 - 서버 통신에서 메시지를 분석하고 메시지 길이 계산 방법을 이해하는 데 문제가 있습니다. ASN.1에서 통신 할 때 LDAP 표준을 기반으로LDAP 긴 메시지 길이 표현

, 각 메시지는 0x30(LDAP 메시지 시작)로 시작 및 다음 바이트 이 (번호 나 따라 관련 바이트)를가있다 전까지 메시지 길이되어야한다 0x20x1은 메시지 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)이지만 정확히 이전 바이트는 무엇을 의미합니까? 이 같은

에도 더 이상 메시지보기 : (DEC 또는 130, 2 또는 227)

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

0x82, 0x2 또는 0xe3되는 실제 길이 (즉 사실 739 인)

마지막 두 예제 사이의 논리를 볼 수 없습니다. 코드에 길이가 어떻게 표시됩니까?

답변

2

ASN.1에서 길이를 인코딩하는 두 가지 방법 - 명확한 형식과 부정 형식이 있습니다.

확실한 형식의 경우 길이가 128보다 작 으면 높은 비트가 0으로 설정된 단일 바이트 만 사용하면됩니다. 그렇지 않으면 상위 비트는 1로 설정되고 하위 7 비트는 길이 길이로 설정됩니다. 길이는 그 다음에 많은 바이트로 인코딩됩니다 (빅 엔디안 순서로).

0x82은 1의 상위 비트를 가지며 나머지 비트는 2와 같습니다. 이는 다음 2 바이트가 길이 (0x02E3 = 739)를 포함 함을 의미합니다.

+0

나는 고맙다. 정확히 내가 알고 싶었던 것이다. – toddddos