BER (Basic Encoding Rules)을 배우고 이해하려고합니다.BER (Basic Encoding Rules)에 대해 혼동 스럽습니다.
다른 ASN.1 개체를 실험하고 BER을 사용하여 인코딩하려면 웹 사이트 http://asn1-playground.oss.com/을 사용해 왔습니다.
그러나 심지어 심지어 가장 간단한 인코딩도 나를 혼란스럽게합니다.
은의 간단한 ASN.1 스키마를 보자 :World-Schema DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Human ::= SEQUENCE {
name UTF8String
}
END
그래서 기본적으로 이것은 단지
name
라는 단일 UTF8String에 유형 필드와
SEQUENCE
입니다.
같은 것이 순서와 일치하는 값의 예 :
some-guy Human ::=
{
name "Bob"
}
내가 기대 : http://asn1-playground.oss.com/
를 사용하여, 그래서
{ "Bob" }
, 나는 다음과 같은 데이터의 BER 인코딩을 생산 이것은 하나의 시퀀스 객체와 하나의 문자열 객체를 생성한다.
는 내가 얻을 것은 :
이30 05 80 03 42 6F 62
지금, 나는이 인코딩의 일부을 이해합니다. 첫 번째 옥텟 인 30
은 식별자 인이며 SEQUENCE
유형이 첫 번째 개체라는 것을 알려줍니다. 30
우리 1
는 (구성 의미)의 0
의 class
하는 PC (프리미티브/건설) 비트를 가지고 있음을 의미하고 SEQUENCE
수단 10000
의 태그 번호 (십진수 16)되는 이진 00110000
인 여태까지는 그런대로 잘됐다. 다음 값은 길이가 SEQUENCE
인 05
의 Y이트입니다.
그래, 지금까지도 그렇게 좋아.
하지만은 ... 나는 다음 옥텟 80
에 의해 완전히 혼란입니다. 그게 무슨 뜻입니까 ??? 03
3의 길이를 의미하며, 42 6F 62
단지 UTF8String에 값 자체 "Bob"
80
을 다음 바이트는 매우 간단하다 00001100의 값을 예상했을 것이다
그러나 그렇다면 어떻게 '03 42 6F 62'가 UTF-8 문자열을 나타내는 지 알고 있어야합니까? 데이터가 UTF8string 유형임을 나타내는 식별자 옥텟은 없습니다 – Channel72
원래 ASN.1 사양이 있어야합니다. ASN.1 스펙에서 해당 필드에 사용 된 자동 태그가 UTF8String을 참조 함을 유추 할 수 있습니다. ASN.1 컴파일러를 사용하는 경우 ASN.1 사양의 정보는 인코더/디코더 생성시 유지되므로 해당 필드의 암시 적 태그가 해당 컨텍스트의 UTF8String과 연결됩니다. –