KJUR.crypto.Mac — компонент библиотеки Jsrsasign,
реализующий вычисление кода аутентификации сообщений (MAC), чаще всего в
форме HMAC (Hash-based Message Authentication Code). Используется для
проверки целостности данных и подтверждения их подлинности на основе
общего секретного ключа.
В основе работы лежат криптографические хеш-функции (SHA-1, SHA-256, SHA-384, SHA-512 и другие), которые применяются совместно с секретным ключом.
Класс ориентирован на потоковую обработку данных: сообщение может поступать по частям, а итоговый MAC вычисляется после завершения ввода.
Параметр алгоритма задаётся строкой и передаётся при создании экземпляра.
Чаще всего используются:
HmacSHA1HmacSHA224HmacSHA256HmacSHA384HmacSHA512Выбор алгоритма определяет криптографическую стойкость и размер выходного значения.
Объект создаётся через:
var mac = new KJUR.crypto.Mac(params);
paramsalg Алгоритм MAC, например
"HmacSHA256".
pass или
key Секретный ключ. Может передаваться
как:
utf8 Интерпретация входных данных
как UTF-8 строк (логическое значение).
hex Указывает, что ключ представлен
в hex-формате.
prov / provider (в
некоторых сборках) Определяет криптографический провайдер (если
доступно).
После создания объект может быть инициализирован явно:
mac.init();
Инициализация сбрасывает внутреннее состояние и подготавливает объект к новому вычислению.
При использовании конструктора с параметрами инициализация обычно выполняется автоматически.
Добавление строки в вычисление MAC:
mac.updateString("message part");
Строка интерпретируется согласно настройкам (UTF-8 или raw).
Добавление данных в hex-представлении:
mac.updateHex("0a1b2c3d");
Используется при работе с бинарными данными, уже преобразованными в hex.
Внутренне данные накапливаются блоками. Это позволяет:
Основной метод получения результата:
var macValue = mac.doFinal();
Возвращает бинарное значение MAC.
После вызова объект обычно требует повторной инициализации для нового расчёта.
Возвращает MAC в hex-строке:
var hex = mac.getMacHex();
Используется при хранении и передаче в текстовых протоколах.
Возвращает результат в Base64:
var b64 = mac.getMacBase64();
Часто применяется в HTTP-заголовках, JWT-подобных структурах и API-аутентификации.
Приводит объект к начальному состоянию:
mac.reset();
Используется при повторном вычислении MAC с тем же ключом.
Типичный сценарий работы включает три этапа:
var mac = new KJUR.crypto.Mac({
alg: "HmacSHA256",
pass: "secret"
});
mac.updateString("data part 1");
mac.updateString("data part 2");
var resultHex = mac.getMacHex();
Ключ может задаваться в разных представлениях:
pass: "password"
pass: "61626364",
hex: true
pass: [97, 98, 99, 100]
При использовании hex-режима важно учитывать корректность длины и кодировки.
update*Если ключ интерпретируется как UTF-8 вместо hex, результат MAC будет отличаться.
После doFinal() объект содержит завершённое состояние, и
дальнейшие update* могут давать некорректный результат без
reset().
HMAC требует идентичного алгоритма и формата ключа на обеих сторонах.
function signRequest(secret, payload) {
var mac = new KJUR.crypto.Mac({
alg: "HmacSHA256",
pass: secret
});
mac.updateString(payload);
return mac.getMacBase64();
}
Используется как основа для подписи API-запросов, где важно обеспечить неизменность данных и подтверждение источника.
При обработке больших сообщений предпочтительно использовать
updateString/updateHex по частям:
mac.updateString(chunk1);
mac.updateString(chunk2);
mac.updateString(chunk3);
Такой подход снижает нагрузку на память и позволяет интеграцию с потоковыми источниками данных (файлы, сети, буферы).
KJUR.crypto.Mac работает:
Зависит от доступности криптографических провайдеров, встроенных в библиотеку.
В экосистеме часто используется совместно с:
KJUR.crypto.MessageDigest — хеширование без ключаKJUR.crypto.Signature — цифровые подписи
(RSA/ECDSA)KEYUTIL — управление ключамиX509 — работа с сертификатами