2015-09-02 3 views
1

OID, похоже, является способом представления дерева как структуры.Кодирование первого идентификатора OID в ASN.1 в BER

Например 1.3.6.1 быть изо (1) .org (3) .did (6) .internet (1)

Схема кодирования используется наиболее часто, как представляется, КОБ и я путать о кодировании первые две цифры. Почему первые две цифры кодируются в один байт, и почему это так:

int first_digit = first_byte/40; 
int second_byte = first_byte % 40; 

ли он предположить, что первые два байта всегда небольшие числа и, следовательно, могут быть «хранятся» легко в один байт? Если так, я могу это понять.

Но почему использование магического номера 40? Почему 40?

например. первый байт в случае выше 1.3.xxx будет кодироваться как 43.

+1

[This] (http://luca.ntop.org/Teaching/Appunti/asn1.html) подтверждает это, но не ссылается на объяснение * why *: "*** значение1 *** ограничено значениями 0, 1 и 2; *** значение2 *** ограничено диапазоном от 0 до 39, когда *** значение 1 *** равно 0 или 1 ". Для этого вам, вероятно, нужно окунуться в интернет-предысторию, комитеты по стандартизации X. и т. Д., И я не уверен, что из этого происходит в Интернете. –

ответ

2

Цитата из книги «ASN.1 Complete», проф. Джон Larmouth, раздел 3.14 (книга доступна для свободного от http://www.oss.com/asn1/resources/books-whitepapers-pubs/larmouth-asn1-book.pdf):

Октеты, кодирующие первые две дуги были (в 1986 г.) считает, что вряд ли когда-либо иметь большие значения, и что с помощью двух октетов для эти две дуги были «плохими». Поэтому была введена «оптимизация» (обязательная).

Ну, есть три дуги верхнего уровня, и мы можем размещать кодировки до 128 дуг (от 0 до 127) в одном октете с концепцией «более бит», описанной выше. 128, разделенный на 3, составляет около 40! Предположим, что первые две дуги верхнего уровня никогда не будут содержать более 40 суб-дуг и выделяют первые 40 псевдо-дуг на дугу верхнего уровня 0, следующие 40 на верхнюю дугу 1, а остальные - на верхнюю дугу, уровневая дуга 2.

+0

ОК, таким образом, это был экономный сбережения, как я и ожидал. –