Пространство имён KEYUTIL библиотеки jsrsasign
представляет собой центральный набор утилит для работы с
криптографическими ключами. Оно обеспечивает создание, преобразование,
импорт и экспорт ключей различных форматов, включая PEM, DER, PKCS#1,
PKCS#5, PKCS#8 и JWK.
Функциональность KEYUTIL охватывает как симметричные,
так и асимметричные ключи, включая RSA, DSA, ECDSA и современные
эллиптические кривые.
KEYUTIL позволяет создавать новые ключевые пары
непосредственно в JavaScript-среде.
Пример генерации RSA-ключа:
var kp = KEYUTIL.generateKeypair("RSA", 2048);
var privateKey = kp.prvKeyObj;
var publicKey = kp.pubKeyObj;
Поддерживаемые алгоритмы:
Пример генерации ECDSA:
var kp = KEYUTIL.generateKeypair("EC", "secp256r1");
Наиболее распространённый сценарий — загрузка ключей из PEM-строки:
var key = KEYUTIL.getKey(pemString);
Функция автоматически определяет:
Если ключ защищён паролем:
var key = KEYUTIL.getKey(pemString, "password");
Поддерживаются:
Экспорт приватного ключа:
var pem = KEYUTIL.getPEM(privateKey, "PKCS1PRV");
Экспорт публичного ключа:
var pem = KEYUTIL.getPEM(publicKey);
var pem = KEYUTIL.getPEM(privateKey, "PKCS8PRV");
С шифрованием:
var pem = KEYUTIL.getPEM(privateKey, "PKCS8PRV", "password");
Формат JSON Web Key используется в веб-приложениях и стандартах вроде JWT.
var key = KEYUTIL.getKey(jwkObject);
Пример JWK:
{
"kty": "RSA",
"n": "...",
"e": "AQAB",
"d": "..."
}
var jwk = KEYUTIL.getJWK(privateKey);
KEYUTIL позволяет конвертировать ключи между
форматами:
Пример:
var keyObj = KEYUTIL.getKey(pem);
var jwk = KEYUTIL.getJWK(keyObj);
KEYUTIL способен извлекать публичные ключи из X.509
сертификатов:
var key = KEYUTIL.getKey(certPEM);
Это особенно важно при работе с TLS, цифровыми подписями и инфраструктурой открытых ключей (PKI).
KEYUTIL интегрируется с криптографическими примитивами
библиотеки:
Используется совместно с модулями:
KJUR.crypto.SignatureKJUR.crypto.CipherПосле загрузки ключа доступна информация о типе:
if (key instanceof RSAKey) {
// RSA ключ
}
Для EC:
if (key.curveName !== undefined) {
// EC ключ
}
Объекты ключей в KEYUTIL представлены
специализированными классами:
RSAKeyKJUR.crypto.ECDSAKJUR.crypto.DSAКаждый класс содержит:
Пример использования ключа для подписи:
var sig = new KJUR.crypto.Signature({alg: "SHA256withRSA"});
sig.init(privateKey);
sig.updateString("data");
var signature = sig.sign();
Проверка подписи:
sig.init(publicKey);
var isValid = sig.verify(signature);
var key = KEYUTIL.getKeyFromPlainPrivatePKCS8Hex(hexString);
var modulus = key.n.toString(16);
var exponent = key.e.toString(16);
KEYUTIL реализует поддержку:
Это делает его универсальным инструментом для работы с криптографией в веб-приложениях.