2016-01-25 2 views
3

Вот что моя структура выглядит следующим образом:Где моя интерпретация ASN1 неверна?

SET OF 
    SEQUENCE: 
    INTEGER: XX 
    INTEGER: YY 

Моя кодировка выглядит следующим образом:

11 08 10 06 02 01 XX 02 01 YY   

11 08 -- SET OF 
10 06 -- SEQUENCE 

Однако, когда я расшифровывать с OpenSSL, я не вижу ожидаемого результата. Похоже, что

0:d=0 hl=2 l= 8 prim: SET    
     0000 - 10 06 02 01 XX 02 01 YY- 

Это не то, что я ожидал увидеть. (Посмотрите на структуру, в которой я хотел бы выглядеть)

Я не уверен, что мне не хватает. Любая помощь приветствуется.

+0

@erickson Ваша помощь и экспертиза будут высоко оценены. – ExceptionHandler

ответ

2

УСТАНОВКА И ПОСЛЕДОВАТЕЛЬНОСТЬ построены. Это означает, что бит, который указывает построенный тип в теге, должен быть установлен. Это будет бит 5 или 6 (в зависимости от того, начинаете ли вы с бит 0 или 1). Если бит не задан, синтаксический анализатор будет рассматривать его как примитивный тип, что означает, что у него есть одно значение вместо детей. Вот почему вы получаете prim в своем выходе. Номер тега по-прежнему равен 17 или 16, что означает SET OF или SEQUENCE, поэтому структура по-прежнему считается SET.

Таким образом, вместо 11 и 10 вы должны использовать значения 31 и 30. Затем ваш код должен правильно разобрать.

+0

Обратите внимание, что есть редакторы ASN.1, которые вы можете использовать для построения структур BER с помощью приятного интерфейса графического интерфейса. Вы можете использовать их для создания некоторых тестовых структур. «Редактор ASN.1» - лишь один из них. –

+0

Пытался написать собственный маленький кодер для целых чисел. Но то, что я не понимаю, это то, что было бы сценарием, в котором можно было бы использовать 11 или 10? – ExceptionHandler

+0

В принципе никогда. Эта комбинация примитивного бита и номера тега не имеет смысла. Однако вы можете разбить некоторые примитивные типы, такие как OCTET STRING. Так что тег 24 может иметь смысл ... –

Смежные вопросы