KJUR.crypto.Cipher представляет собой высокоуровневый интерфейс шифрования в библиотеке jsrsasign, ориентированный на симметричное и частично асимметричное шифрование через унифицированный API. Он используется как обёртка над различными криптографическими примитивами (AES, DES, RSA и др.), обеспечивая единый способ работы с алгоритмами, режимами и кодировками данных.
Основная задача компонента — скрыть различия между криптографическими алгоритмами и предоставить единый набор параметров для шифрования и расшифрования данных.
Внутри jsrsasign шифрование организовано через фабрику, которая по имени алгоритма и параметрам создает соответствующий криптографический процессор. Поддерживаются как симметричные алгоритмы (AES-CBC, AES-GCM, DES-EDE3), так и асимметричные схемы (RSAES-PKCS1-v1_5, RSA-OAEP через другие модули библиотеки).
Ключевые сущности:
KJUR.crypto.Cipher принимает конфигурационный объект или набор аргументов, определяющих поведение криптографической операции.
Параметр определяет криптографический алгоритм:
Пример:
AESAES/CBC/PKCS5PaddingDESede/CBC/NoPaddingАлгоритм может задаваться в виде строки с полной спецификацией или в виде отдельных параметров.
Режим определяет способ обработки блоков данных:
Режим напрямую влияет на необходимость использования IV.
Дополнение данных до размера блока:
Padding критически важен для блочных алгоритмов (AES, DES).
Ключ передается в зависимости от алгоритма:
Ключ может предварительно обрабатываться через KJUR.crypto.KEYUTIL.
IV используется в режимах CBC, CFB, OFB.
Отсутствие IV в CBC-режиме делает шифрование предсказуемым.
Поддерживаемые форматы:
hexbase64stringarraybuffer (в некоторых конфигурациях)Формат задается через параметры:
informatoutformatВ jsrsasign предусмотрены удобные статические методы для быстрого шифрования и расшифрования без создания экземпляра класса.
Метод выполняет шифрование данных.
Параметры:
data — исходная строка или байтовый массивkey — ключ шифрованияalg — алгоритмiv — вектор инициализации (если требуется)pass — пароль (в некоторых схемах PBKDF2)options — дополнительные параметры (форматы,
padding)Поведение метода зависит от выбранного алгоритма:
Пример использования:
var encrypted = KJUR.crypto.Cipher.encrypt(
"message",
"00112233445566778899aabbccddeeff",
"AES/CBC/PKCS5Padding",
"0102030405060708"
);
Метод выполняет обратную операцию — расшифрование.
Параметры идентичны encrypt, за исключением направления операции.
Пример:
var decrypted = KJUR.crypto.Cipher.decrypt(
encrypted,
"00112233445566778899aabbccddeeff",
"AES/CBC/PKCS5Padding",
"0102030405060708"
);
При использовании объектного подхода создается экземпляр шифратора, который хранит состояние конфигурации.
Конструктор принимает объект конфигурации:
Пример структуры:
var cipher = new KJUR.crypto.Cipher({
alg: "AES",
mode: "CBC",
padding: "PKCS5Padding",
key: keyHex,
iv: ivHex
});
Метод инициализации состояния шифрования.
Используется при повторной конфигурации экземпляра.
Добавляет данные в поток шифрования.
Используется при блочной или потоковой обработке.
Особенности:
Завершает процесс шифрования или расшифрования.
Возвращает финальный результат с учетом padding.
Обязательный вызов после update.
В зависимости от реализации версии jsrsasign может присутствовать метод низкоуровневого шифрования блока.
Аналогичный метод для обратного преобразования блока данных.
Для RSA шифрования Cipher работает через PEM-ключи и схему RSAES.
Параметры:
Особенности:
Пример:
var encrypted = KJUR.crypto.Cipher.encrypt(
"secret",
publicKeyPEM,
"RSA"
);
При использовании KJUR.crypto.Cipher возможны типовые ошибки:
Ошибки обычно выбрасываются как исключения JavaScript
(throw Error).
Для работы с ключами часто используется вспомогательный модуль:
Пример:
var rsaKey = KEYUTIL.getKey(publicKeyPEM);
Далее ключ передается в Cipher.
var key = "00112233445566778899aabbccddeeff";
var iv = "0102030405060708";
var enc = KJUR.crypto.Cipher.encrypt(
"test data",
key,
"AES/CBC/PKCS5Padding",
iv
);
var dec = KJUR.crypto.Cipher.decrypt(
enc,
key,
"AES/CBC/PKCS5Padding",
iv
);
var encrypted = KJUR.crypto.Cipher.encrypt(
"data",
publicKeyPEM,
"RSA"
);
var decrypted = KJUR.crypto.Cipher.decrypt(
encrypted,
privateKeyPEM,
"RSA"
);
Часто используемые форматы:
Конвертация выполняется автоматически при указании параметров
informat / outformat.
{
alg: "AES",
mode: "CBC",
padding: "PKCS5Padding",
key: "...",
iv: "...",
inFormat: "string",
outFormat: "base64"
}