Jsrsasign используется в браузере как обычная глобальная библиотека, без необходимости сборки и настройки webpack, vite или других инструментов. Основной способ подключения — через CDN.
Подключение через jsDelivr:
<script src="https://cdn.jsdelivr.net/npm/jsrsasign/lib/jsrsasign-all-min.js"></script>
Подключение через unpkg:
<script src="https://unpkg.com/jsrsasign/lib/jsrsasign-all-min.js"></script>
После загрузки скрипта библиотека становится доступной через глобальные пространства имён:
KJUR — основной набор криптографических функцийKEYUTIL — работа с ключамиhextob64, b64tohex — утилиты
кодированияX509 — работа с сертификатами X.509Особенность такого подключения заключается в синхронной загрузке: порядок подключения скриптов критичен, так как библиотека не использует ES-модули.
После подключения Jsrsasign в браузере появляется несколько ключевых объектов:
KJUR.crypto
KJUR.jws
KJUR.jwe
KEYUTIL
X509
Эта архитектура рассчитана на использование без модульной системы.
Jsrsasign предоставляет реализацию хэш-функций без использования WebCrypto API.
Пример вычисления SHA-256:
const hash = KJUR.crypto.Util.hashString("hello world", "sha256");
console.log(hash);
Поддерживаемые алгоритмы:
Хэш возвращается в hex-формате. Для преобразования часто используются встроенные утилиты:
const b64 = hextob64(hash);
Одна из ключевых возможностей — создание цифровой подписи.
Пример RSA-SHA256 подписи:
const sig = new KJUR.crypto.Signature({ "alg": "SHA256withRSA" });
sig.init(privateKeyPem);
sig.updateString("message to sign");
const signatureHex = sig.sign();
const signatureBase64 = hextob64(signatureHex);
Поддерживаемые алгоритмы:
Ключ передаётся в формате PEM.
Проверка выполняется тем же объектом Signature:
const sig = new KJUR.crypto.Signature({ "alg": "SHA256withRSA" });
sig.init(publicKeyPem);
sig.updateString("message to sign");
const isValid = sig.verify(b64tohex(signatureBase64));
Важно учитывать, что данные должны совпадать побайтно, включая кодировку строки.
Jsrsasign позволяет импортировать и использовать ключи в формате PEM без преобразования в ArrayBuffer.
Пример RSA ключа:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Загрузка ключа:
const keyObj = KEYUTIL.getKey(privateKeyPem);
Извлечение публичного ключа:
const pubKey = KEYUTIL.getKey(publicKeyPem);
Генерация PEM из объекта:
const pem = KEYUTIL.getPEM(keyObj);
Jsrsasign поддерживает генерацию ключей RSA:
const kp = KEYUTIL.generateKeypair("RSA", 2048);
const privatePem = KEYUTIL.getPEM(kp.prvKeyObj, "PKCS8PRV");
const publicPem = KEYUTIL.getPEM(kp.pubKeyObj);
Параметры:
Одна из самых используемых функций — работа с JWT.
const header = { alg: "HS256", typ: "JWT" };
const payload = { sub: "1234567890", name: "John Doe", iat: 1516239022 };
const token = KJUR.jws.JWS.sign(
"HS256",
JSON.stringify(header),
JSON.stringify(payload),
"secret"
);
const isValid = KJUR.jws.JWS.verify(token, "secret", ["HS256"]);
const parsed = KJUR.jws.JWS.parse(token);
console.log(parsed.payloadPP);
Поддерживаемые алгоритмы:
Пример использования RSA ключей:
const token = KJUR.jws.JWS.sign(
"RS256",
JSON.stringify({ alg: "RS256", typ: "JWT" }),
JSON.stringify({ data: "payload" }),
privateKeyPem
);
Проверка:
const valid = KJUR.jws.JWS.verify(token, publicKeyPem, ["RS256"]);
Jsrsasign включает утилиты для работы с Base64 и Hex:
const hex = "48656c6c6f";
const base64 = hextob64(hex);
const backToHex = b64tohex(base64);
Также доступно URL-safe Base64:
const urlSafe = hextob64u(hex);
Jsrsasign позволяет анализировать сертификаты:
const cert = new X509();
cert.readCertPEM(certPem);
const subject = cert.getSubjectString();
const issuer = cert.getIssuerString();
Проверка подписи сертификата:
const isValid = cert.verifySignature();
В браузере без сборщика важно учитывать особенности загрузки:
<script src="jsrsasign-all-min.js"></script>
<script src="app.js"></script>
Нарушение порядка приведёт к отсутствию глобального
KJUR.
При использовании defer:
<script src="jsrsasign-all-min.js" defer></script>
Скрипт становится доступен только после построения DOM.
Jsrsasign может конфликтовать с жёсткими CSP-политиками, если запрещены:
unsafe-evalПри использовании без сборщика и WebCrypto:
crypto.subtleJsrsasign может использоваться параллельно с WebCrypto:
Пример гибридного подхода:
Ошибка: KJUR is not defined
Ошибка подписи
JWT invalid signature
Проблемы с PEM
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/jsrsasign/lib/jsrsasign-all-min.js"></script>
</head>
<body>
<script>
const token = KJUR.jws.JWS.sign(
"HS256",
JSON.stringify({ alg: "HS256", typ: "JWT" }),
JSON.stringify({ user: "demo" }),
"secret"
);
console.log(token);
</script>
</body>
</html>
Jsrsasign поддерживает старые версии браузеров благодаря:
Поддержка включает даже устаревшие окружения, где WebCrypto отсутствует полностью.