Класс KJUR.asn1.DERUTF8String представляет ASN.1 тип
данных UTF8String, закодированный в формате DER
(Distinguished Encoding Rules). Этот тип используется для хранения
текстовых строк в кодировке UTF-8 внутри ASN.1 структур, которые широко
применяются в криптографии: сертификатах X.509, запросах CSR,
криптографических токенах и протоколах обмена ключами.
UTF8String является одним из базовых строковых типов ASN.1 и
поддерживает полный набор символов Unicode, в отличие от более
ограниченных типов вроде PrintableString или
IA5String.
ASN.1 определяет набор универсальных типов данных, где строковые типы отличаются допустимым набором символов:
PrintableString — ограниченный набор
ASCII-символовIA5String — расширенный ASCII (7-bit)BMPString — Unicode BMP (UCS-2)UTF8String — полный Unicode через UTF-8DERUTF8String в jsrsasign реализует именно последний
вариант, обеспечивая корректное представление международных
символов.
В DER-кодировке каждый ASN.1 элемент состоит из трёх частей:
0x0C)DERUTF8String отвечает за корректное формирование этих
компонентов и преобразование строки в бинарное представление.
Создание объекта выполняется через конструктор
KJUR.asn1.DERUTF8String:
new KJUR.asn1.DERUTF8String({
str: "значение строки"
})
str — исходная строка в JavaScript (UTF-16 внутри
движка, преобразуется в UTF-8 при кодировании DER)Дополнительно через наследуемую инфраструктуру ASN.1 могут
использоваться параметры управления DER-структурой, но основной рабочий
параметр — именно str.
При создании экземпляра выполняются следующие шаги:
Строка JavaScript интерпретируется как Unicode
Производится преобразование в UTF-8 байтовую последовательность
Формируется DER-структура:
0x0C)Пример внутреннего представления:
0C 0B 48 65 6C 6C 6F 20 D0 9C D0 B8 D1 80
Здесь строка содержит латиницу и кириллицу.
DERUTF8String является частью иерархии ASN.1 объектов
библиотеки jsrsasign:
KJUR.asn1.ASN1Object
KJUR.asn1.DERAbstractString
KJUR.asn1.DERUTF8StringБазовый класс DERAbstractString предоставляет общую
логику работы со строковыми ASN.1 типами, включая:
Возвращает исходное строковое значение:
obj.getString()
Результат — обычная JavaScript-строка.
Возвращает DER-кодировку в виде hex-строки:
obj.getEncodedHex()
Результат включает tag + length + value.
Часто используется для отладки и возвращает строковое представление объекта:
obj.toString()
var utf8 = new KJUR.asn1.DERUTF8String({
str: "Hello Мир"
});
console.log(utf8.getString());
// Hello Мир
console.log(utf8.getEncodedHex());
Результат будет содержать DER-последовательность с тегом UTF8String
(0x0C).
DERUTF8String часто применяется внутри сложных ASN.1
конструкций:
var subject = new KJUR.asn1.x509.X500Name({
array: [
["CN", new KJUR.asn1.DERUTF8String({ str: "example.com" })],
["O", new KJUR.asn1.DERUTF8String({ str: "Компания" })]
]
});
Хотя чаще библиотека автоматически выбирает тип строки, явное использование UTF8String требуется при строгом контроле кодировки.
| Класс | ASN.1 тип | Особенности |
|---|---|---|
| DERUTF8String | UTF8String | Полный Unicode |
| DERPrintableString | PrintableString | Ограниченный ASCII |
| DERIA5String | IA5String | 7-bit ASCII |
| DERBMPString | BMPString | UCS-2 (2 байта на символ) |
DERUTF8String является наиболее универсальным вариантом
и предпочтителен для современных систем.
Особенности преобразования:
Это обеспечивает совместимость с международными сертификатами и современными TLS-реализациями.
Так как JavaScript строки уже Unicode-совместимы,
DERUTF8String не требует предварительной нормализации,
однако:
При вызове getEncodedHex() происходит:
0x0CDERUTF8String активно используется в:
Его использование критично для корректного представления интернациональных данных в криптографических системах.