Алгоритмы хеширования в jsrsasign реализованы через модуль
KJUR.crypto, предоставляя набор криптографических
примитивов, которые охватывают как классические, так и современные
семейства хеш-функций. Основное назначение этих алгоритмов —
формирование фиксированного по длине дайджеста сообщения, используемого
для проверки целостности данных, цифровых подписей, HMAC и различных
криптографических протоколов.
В библиотеке используется объектно-ориентированная модель через
KJUR.crypto.MessageDigest. Каждый алгоритм инкапсулируется
внутри единого интерфейса, что позволяет унифицировать процесс
вычисления хеша независимо от выбранной функции.
Основные этапы работы:
Ключевая особенность — поддержка как строкового ввода, так и бинарных данных в формате hex или base64.
Пример базового использования:
const md = new KJUR.crypto.MessageDigest({alg: "sha256"});
md.updateString("data");
const hash = md.digest();
SHA-1 реализован в библиотеке для совместимости с устаревшими системами и протоколами.
Использование:
const md = new KJUR.crypto.MessageDigest({alg: "sha1"});
md.updateString("message");
const hash = md.digest();
Особенности:
SHA-1 сохраняется в jsrsasign исключительно для обратной совместимости, особенно в контексте старых X.509 сертификатов и подписей.
SHA-256 является наиболее часто используемым алгоритмом в экосистеме jsrsasign. Он входит в семейство SHA-2 и обеспечивает высокий уровень криптографической стойкости.
const md = new KJUR.crypto.MessageDigest({alg: "sha256"});
md.updateString("message");
const hash = md.digest();
Характеристики:
SHA-256 активно используется внутри KJUR.jws.JWS при
создании JSON Web Signature.
SHA-384 и SHA-512 относятся к расширенному семейству SHA-2 и используются там, где требуется более высокая криптостойкость или работа с 64-битной архитектурой.
SHA-384:
const md = new KJUR.crypto.MessageDigest({alg: "sha384"});
md.updateString("message");
const hash = md.digest();
SHA-512:
const md = new KJUR.crypto.MessageDigest({alg: "sha512"});
md.updateString("message");
const hash = md.digest();
Особенности:
SHA-512 часто используется в HMAC-режиме для серверных приложений с повышенными требованиями к безопасности.
SHA-3 реализован в jsrsasign как современная альтернатива SHA-2. Он основан на конструкции Keccak и использует другую внутреннюю архитектуру (sponge construction).
Пример:
const md = new KJUR.crypto.MessageDigest({alg: "sha3-256"});
md.updateString("message");
const hash = md.digest();
Поддерживаемые варианты:
Особенности SHA-3:
MD5 в jsrsasign присутствует исключительно для совместимости с устаревшими системами.
const md = new KJUR.crypto.MessageDigest({alg: "md5"});
md.updateString("message");
const hash = md.digest();
Характеристики:
MD5 применим только для некритичных задач, например:
RIPEMD-160 используется в некоторых криптографических системах, включая старые реализации блокчейн-адресов.
const md = new KJUR.crypto.MessageDigest({alg: "ripemd160"});
md.updateString("message");
const hash = md.digest();
Особенности:
jsrsasign поддерживает HMAC (Hash-based Message Authentication Code)
через KJUR.crypto.Mac, где любой поддерживаемый
хеш-алгоритм может выступать в роли базовой функции.
Пример с SHA-256:
const mac = new KJUR.crypto.Mac({alg: "HmacSHA256", pass: "secret"});
mac.updateString("message");
const hmac = mac.doFinal();
Используемые алгоритмы:
HMAC в jsrsasign применяется в:
Механизм updateString, updateHex,
updateByteArray позволяет обрабатывать данные частями. Это
важно при работе с большими файлами или потоками данных.
const md = new KJUR.crypto.MessageDigest({alg: "sha256"});
md.updateHex("4a6f686e");
md.updateString("Doe");
const hash = md.digest();
Такой подход позволяет:
jsrsasign поддерживает несколько форматов результата:
Пример преобразования:
const md = new KJUR.crypto.MessageDigest({alg: "sha256"});
md.updateString("message");
const hex = md.digest();
Дополнительные утилиты KJUR.crypto.Util позволяют
конвертировать результат в base64:
const b64 = hextob64(hex);
Реализация хешей в jsrsasign ориентирована на совместимость с Java-версией BouncyCastle и собственным криптографическим стеком KJUR. Это означает:
При этом библиотека сохраняет детерминированность результата между платформами, что критично для цифровых подписей.
Хеширование является базовым этапом в процессе формирования подписи:
В jsrsasign этот процесс инкапсулирован в высокоуровневых API, однако понимание работы хешей остаётся обязательным для корректной настройки алгоритмов подписи.
Каждый алгоритм выбирается в зависимости от требований протокола и уровня безопасности.
Выбор алгоритма в jsrsasign напрямую влияет на совместимость с внешними системами, особенно в контексте подписи и проверки токенов.