Подключение через npm

Библиотека jsrsasign распространяется через npm и может быть установлена стандартным способом, используемым в экосистеме Node.js.

npm install jsrsasign

После установки пакет попадает в node_modules и становится доступным для импорта как в CommonJS, так и в современных ESM-проектах.


Подключение в Node.js (CommonJS)

В классическом окружении Node.js библиотека подключается через require. Это наиболее совместимый и часто используемый способ в существующих проектах.

const jsrsasign = require("jsrsasign");

После подключения становятся доступны основные пространства имён библиотеки:

  • jsrsasign.KJUR
  • jsrsasign.KEYUTIL
  • jsrsasign.KJUR.crypto
  • jsrsasign.KJUR.jws

Пример генерации RSA ключа:

const { KEYUTIL } = require("jsrsasign");

const keypair = KEYUTIL.generateKeypair("RSA", 2048);
console.log(keypair.prvKeyObj);
console.log(keypair.pubKeyObj);

Подключение через ES Modules

В современных проектах, использующих "type": "module" или сборщики, поддерживающие ESM, библиотека подключается через import.

import jsrsasign from "jsrsasign";

Или точечно:

import { KEYUTIL, KJUR } from "jsrsasign";

Однако важно учитывать, что структура экспорта может зависеть от сборщика. В некоторых конфигурациях надёжнее использовать default import:

import jsrsasign from "jsrsasign";

const { KEYUTIL } = jsrsasign;

Использование в браузере через сборщики

При использовании Webpack, Vite или Rollup библиотека автоматически включается в бандл после установки через npm.

Пример использования в модуле фронтенда:

import jsrsasign from "jsrsasign";

const header = { alg: "HS256", typ: "JWT" };
const payload = { sub: "1234567890", name: "Alice" };

const sHeader = JSON.stringify(header);
const sPayload = JSON.stringify(payload);

const secret = "my-secret";

const jwt = jsrsasign.KJUR.jws.JWS.sign(
  "HS256",
  sHeader,
  sPayload,
  secret
);

console.log(jwt);

Структура пакета после установки

После установки npm-пакета основная логика находится внутри:

node_modules/jsrsasign/

Ключевые части:

  • lib/ — основная библиотека
  • jsrsasign.js — сборка для общего использования
  • jsrsasign-all-min.js — минифицированная версия
  • package.json — описание модулей и экспортов

Работа с криптографией после подключения

После подключения через npm доступны основные модули криптографии.

Генерация RSA ключей

const { KEYUTIL } = require("jsrsasign");

const kp = KEYUTIL.generateKeypair("RSA", 2048);

const privateKey = KEYUTIL.getPEM(kp.prvKeyObj, "PKCS1PRV");
const publicKey = KEYUTIL.getPEM(kp.pubKeyObj);

console.log(privateKey);
console.log(publicKey);

Подпись данных (HMAC)

const { KJUR } = require("jsrsasign");

const signature = KJUR.crypto.Mac.signString(
  "hello world",
  "secret",
  "sha256"
);

console.log(signature);

Работа с JWT через npm-установку

Одно из наиболее частых применений — работа с JSON Web Token.

Создание JWT

const jsrsasign = require("jsrsasign");

const header = { alg: "HS256", typ: "JWT" };
const payload = { userId: 42, role: "admin" };

const token = jsrsasign.KJUR.jws.JWS.sign(
  "HS256",
  JSON.stringify(header),
  JSON.stringify(payload),
  "super-secret-key"
);

console.log(token);

Проверка JWT

const isValid = jsrsasign.KJUR.jws.JWS.verifyJWT(
  token,
  "super-secret-key",
  { alg: ["HS256"] }
);

console.log(isValid);

Типичные проблемы при подключении через npm

Конфликт ESM и CommonJS

В проектах с "type": "module" может возникать ситуация, когда require недоступен. В этом случае используется import.

import jsrsasign from "jsrsasign";

Ошибка “window is not defined”

Библиотека частично ориентирована на браузерную среду. В Node.js иногда требуется полифилл глобальных объектов:

global.window = {};

Неправильный импорт модулей

Некоторые окружения требуют доступа через default export:

import jsrsasign from "jsrsasign";

const KJUR = jsrsasign.KJUR;

Использование в TypeScript-проектах

TypeScript не содержит встроенных типов для jsrsasign, поэтому часто используется импорт с объявлением типов вручную.

declare module "jsrsasign";

import jsrsasign from "jsrsasign";

После этого библиотека используется аналогично Jav * aScript:

const token: string = jsrsasign.KJUR.jws.JWS.sign(
  "HS256",
  JSON.stringify({ alg: "HS256" }),
  JSON.stringify({ data: "value" }),
  "key"
);

Подключение в старых сборках (Browserify / RequireJS)

В устаревших сборках библиотека может подключаться как UMD-модуль:

<script src="node_modules/jsrsasign/lib/jsrsasign-all-min.js"></script>
<script>
  const sig = KJUR.crypto.Util.sha256("data");
  console.log(sig);
</script>

Выбор варианта импорта в зависимости от окружения

Node.js (CommonJS)

  • require("jsrsasign")
  • максимальная совместимость

Node.js (ESM)

  • import jsrsasign from "jsrsasign"
  • предпочтительно в современных проектах

Frontend (Vite/Webpack)

  • import jsrsasign from "jsrsasign"
  • автоматически попадает в бандл

Старый браузер

  • <script> подключение UMD-сборки

Особенности npm-версии библиотеки

  • содержит полный криптографический стек JavaScript
  • не требует нативных бинарных зависимостей
  • полностью работает в чистом JS
  • подходит для Node.js и браузера
  • включает поддержку RSA, ECDSA, HMAC, JWT, X.509

Пример комплексного использования после установки

const jsrsasign = require("jsrsasign");

const { KJUR, KEYUTIL } = jsrsasign;

// генерация ключей
const kp = KEYUTIL.generateKeypair("RSA", 2048);

// создание JWT
const header = { alg: "RS256", typ: "JWT" };
const payload = { user: "admin" };

const privateKeyPem = KEYUTIL.getPEM(kp.prvKeyObj, "PKCS8PRV");

const jwt = KJUR.jws.JWS.sign(
  "RS256",
  JSON.stringify(header),
  JSON.stringify(payload),
  privateKeyPem
);

console.log(jwt);