OCTET STRING в ASN.1 представляет собой базовый тип данных для
хранения произвольной последовательности байтов. В контексте DER
(Distinguished Encoding Rules) этот тип кодируется строго по
фиксированным правилам: тег 0x04, длина и сами байты
значения.
В библиотеке jsrsasign класс KJUR.asn1.DEROctetString
инкапсулирует логику формирования ASN.1 структуры OCTET STRING в
DER-формате и используется как строительный блок для более сложных
структур (например, сертификатов X.509, CMS, PKCS#7, SPKI).
Класс относится к пространству имен KJUR.asn1 и
наследует базовые возможности ASN.1 объектов библиотеки jsrsasign.
Основная задача класса — преобразование входных данных (строк, hex-последовательностей или бинарного содержимого) в корректно закодированный DER OCTET STRING.
Создание объекта выполняется через конструктор:
new KJUR.asn1.DEROctetString(params)
Параметр params представляет собой объект конфигурации,
в котором наиболее часто используются следующие поля:
str — строка, которая будет интерпретирована как
текстовые данные (обычно UTF-8 или ASCII в зависимости от контекста
использования)hex — строка в шестнадцатеричном формате,
представляющая уже готовые байтыobj — вложенный ASN.1 объект (используется реже, для
композиции структур)Приоритет обработки обычно следующий: hex имеет более
высокий приоритет, чем str, поскольку считается уже
бинарным представлением.
DER-кодирование OCTET STRING строится по строгому шаблону:
[0x04][length][value-bytes]
Где:
0x04 — ASN.1 тег OCTET STRINGlength — длина полезной нагрузкиvalue-bytes — сами данныеКласс DEROctetString автоматически вычисляет длину и
формирует корректную последовательность байтов без необходимости ручного
вмешательства.
При использовании поля str строка преобразуется в
байтовое представление. В jsrsasign это обычно UTF-8 кодировка.
Пример создания:
var o = new KJUR.asn1.DEROctetString({
str: "Hello"
});
Внутри происходит преобразование символов в байты и последующее DER-кодирование.
Особенность: результат зависит от интерпретации строки на уровне
библиотеки, поэтому для бинарно-критичных задач предпочтительнее
использовать hex.
Поле hex позволяет задавать уже готовые байты без
преобразования из строки:
var o = new KJUR.asn1.DEROctetString({
hex: "01020304ff"
});
В этом случае библиотека:
Это основной режим при работе с криптографическими структурами.
DEROctetString может использоваться для упаковки других
ASN.1 элементов.
Пример концепции:
Это часто применяется в сложных форматах, где OCTET STRING выступает контейнером для сериализованных структур.
После создания объекта можно получить итоговое представление в DER:
Типичный вызов:
o.getEncodedHex()
Результат — строка hex, представляющая полностью закодированный ASN.1 объект.
DEROctetString не хранит данные в виде “сырого массива
байтов” в открытом виде. Вместо этого:
При повторных вызовах кодирования обычно используется уже готовое представление.
OCTET STRING является одним из наиболее часто используемых типов ASN.1 в криптографии:
В jsrsasign DEROctetString часто используется как
промежуточный слой при построении:
При работе с большими бинарными данными важны следующие особенности:
OCTET STRING не накладывает ограничений на размер, кроме ограничений среды выполнения JavaScript.
Если бинарные данные интерпретируются как str, возможна
потеря информации из-за кодировки.
Строка hex должна содержать только валидные символы
[0-9a-fA-F] и иметь чётную длину.
Ошибочная ситуация возникает, когда DER-структура уже закодирована,
но снова помещается как str, приводя к некорректной
вложенности.
| Режим | Назначение | Особенности |
|---|---|---|
| str | Текстовые данные | Автоматическое преобразование в байты |
| hex | Бинарные данные | Прямое включение байтов без преобразования |
В сложных структурах DEROctetString часто выступает как
контейнер:
Это делает его одним из фундаментальных классов ASN.1 в jsrsasign.