INTEGER (API регистрации сертификатов)
Целочисленные значения кодируются в триплет TLV, начинающийся со значения тега 0x02. Поле "Значение " тройника TLV содержит закодированное целое число, если оно положительное, или его дополнение, если оно отрицательное. Если целое число является положительным, но бит высокого порядка имеет значение 1, в содержимое добавляется ведущее 0x00, указывающее, что число не является отрицательным. Например, байт высокого порядка 0x8F (10001111) равен 1. Поэтому в содержимое добавляется начальный нулевой байт, как показано на следующем рисунке.
Если целое число содержит менее 128 байт, поле Length требует только одного байта, чтобы указать длину содержимого. Если целое число превышает 127 байт, бит 7 поля Length имеет значение 1, а биты от 6 до 0 указывают количество дополнительных байтов, используемых для определения длины содержимого. Дополнительные сведения см. в разделе "Закодированная длина и значение байтов".
В следующем примере из PKCS #10 в кодировке ASN.1 показана кодировка для открытого ключа 128 байтов. Первый байт содержит значение тега для типа данных INTEGER 0x02. Второе и третье байты содержат значение Length . Бит 7 второго байта имеет значение 1, так как содержимое превышает 127 байт. Биты от 0 до 6 второго байта указывают число байтов, необходимых для точного указания длины содержимого. Третий байт указывает количество байтов содержимого, 0x81. Четвертый байт, 0x00, добавляется в содержимое, чтобы указать, что целое число действительно положительное значение, даже если бит начального байта содержимого (0x8F) имеет значение 1.
02 81 81 ; INTEGER (81 Bytes)
| 00
| 8f e2 41 2a 08 e8 51 a8 8c b3 e8 53 e7 d5 49 50
| b3 27 8a 2b cb ea b5 42 73 ea 02 57 cc 65 33 ee
| 88 20 61 a1 17 56 c1 24 18 e3 a8 08 d3 be d9 31
| f3 37 0b 94 b8 cc 43 08 0b 70 24 f7 9c b1 8d 5d
| d6 6d 82 d0 54 09 84 f8 9f 97 01 75 05 9c 89 d4
| d5 c9 1e c9 13 d7 2a 6b 30 91 19 d6 d4 42 e0 c4
| 9d 7c 92 71 e1 b2 2f 5c 8d ee f0 f1 17 1e d2 5f
| 31 5b b1 9c bc 20 55 bf 3a 37 42 45 75 dc 90 65
В следующем примере показано, как кодируется целочисленное значение 0x03. Байт тега содержит 0x02, а байт длины указывает, что имеется один байт содержимого.
02 01 ; INTEGER (1 Bytes)
| 03
Связанные темы