D에 Basic Encoding Rules 코덱을 쓰려고하는데, 길이가으로 설정되고 길이 바이트가 double로 설정되는 무한 길이 인코딩으로 데이터를 인코딩하는 기능이 필요합니다. null 0x00 0x00
(끝). 그러나 두 번 null이 인코딩되는 실제 값의 일부인 경우가 있습니다. 예를 들어, OCTET STRING
이있는 경우 인접한 두 바이트는 0x00 0x00
일 수 있으며 인코딩 된 값의 일부가 아닌 END OF CONTENT
으로 해석되어 인코딩 된 값이 잘리는 경우 (최상의 경우 시나리오)가 될 수 있습니다. END OF CONTENT
으로 해석하지 않고 두 번 null을 인코딩하는 방법이 있습니까? 또는 이중 널 (null)이없는 값만 인코딩 할 것으로 예상됩니까? 나는 아직 어떤 사양에서도 이걸 발견하지 못했다.BER에서 무한 길이로 인코딩 된 옥텟 문자열에서 이중 널 옥텟을 어떻게 이스케이프합니까?
1
A
답변
2
일반 OCTET STRING 콘텐츠를 0x80과 0x00 0x00 사이에 두지 마십시오. 대신 확실한 길이로 인코딩 된 OCTET STRING을 [가능성있는 부분]에 넣습니다. 즉
는 무기한 길이 인코딩, 단일 옥텟은 "AB"ASCII 문자열을 청크 (예를 들어, 0x41을 0x42를 진수의)과 같을 것이다 :
0x24 0x80 0x04 0x01 0x41 0x04 0x1 0x42 0x00 0x00
^ ^ ^ ^
outer header inner chunk #1 inner chunk #2 outer EOO sentinel
최종 결과는 디코더가없는 것입니다 페이로드 마진은 명확한 길이 인코딩 된 조각에 의해 명확하게 정의되기 때문에 EOO 마크를 검색하는 실제 페이로드를 스캔 할 수 있습니다.
이 경우 외부 헤더는 생성자로 표시되어야하므로 0x24로 인코딩해야합니다. 식별자 태그 (P/C)의 비트 6이 생성되도록 설정됩니다. – pepo
@pepo 사실! 감사! ;-) –