RIPEMD-160 — криптографическая хеш-функция, разработанная в рамках проекта RIPE (RACE Integrity Primitives Evaluation Message Digest). Алгоритм формирует хеш длиной 160 бит (20 байт) и предназначен для обеспечения целостности данных и создания цифровых отпечатков.
Функция строится по принципу итеративного сжатия (Merkle–Damgård) и обрабатывает входные данные блоками по 512 бит. Отличительной особенностью является использование двух параллельных вычислительных ветвей, что повышает криптостойкость.
Ключевые свойства:
Библиотека Crypto-js предоставляет реализацию RIPEMD-160 как отдельный модуль.
Установка через npm:
npm install crypto-js
Импорт:
const CryptoJS = require("crypto-js");
require("crypto-js/ripemd160");
В ES6:
import CryptoJS from "crypto-js";
import "crypto-js/ripemd160";
Простейшее применение — вычисление хеша строки:
const hash = CryptoJS.RIPEMD160("Hello, world!");
console.log(hash.toString());
Результат:
98c615784ccb5fe5936fbc0cbe9dfdb408d92f0f
По умолчанию вывод происходит в hex-формате.
Crypto-js использует внутренний формат WordArray. Для
корректной обработки строк в различных кодировках применяются
энкодеры.
const hash = CryptoJS.RIPEMD160("Пример текста");
const hash = CryptoJS.RIPEMD160(
CryptoJS.enc.Utf8.parse("Пример текста")
);
Результат можно вывести в различных форматах:
hash.toString(CryptoJS.enc.Hex);
hash.toString(CryptoJS.enc.Base64);
hash.toString(CryptoJS.enc.Latin1);
Для работы с бинарными данными необходимо создать
WordArray.
Пример с массивом байтов:
const wordArray = CryptoJS.lib.WordArray.create([0x12345678, 0x90abcdef]);
const hash = CryptoJS.RIPEMD160(wordArray);
console.log(hash.toString());
Crypto-js поддерживает поэтапную обработку данных, что полезно при работе с большими потоками.
const ripemd160 = CryptoJS.algo.RIPEMD160.create();
ripemd160.update("Часть 1");
ripemd160.update("Часть 2");
const hash = ripemd160.finalize();
console.log(hash.toString());
Особенности:
update() можно вызывать многократноfinalize() завершает вычисление и возвращает
результатfinalize() объект не должен использоваться
повторноRIPEMD-160 может применяться в HMAC (Hash-based Message Authentication Code).
const hmac = CryptoJS.HmacRIPEMD160("message", "secret-key");
console.log(hmac.toString());
Эквивалент через явный вызов:
const hmac = CryptoJS.algo.HMAC.create(
CryptoJS.algo.RIPEMD160,
"secret-key"
);
hmac.update("message");
const result = hmac.finalize();
console.log(result.toString());
RIPEMD-160 использует:
Каждая итерация включает:
После обработки блока результаты обеих ветвей объединяются.
Несмотря на одинаковую длину хеша (160 бит), RIPEMD-160 отличается:
Практически:
Типичные области использования:
Пример двойного хеширования (как в Bitcoin):
const sha256 = CryptoJS.SHA256("data");
const ripemd160 = CryptoJS.RIPEMD160(sha256);
console.log(ripemd160.toString());
Несмотря на устойчивость, RIPEMD-160:
Рекомендации:
Crypto-js реализует RIPEMD-160 на чистом JavaScript, что означает:
Для высоконагруженных систем предпочтительнее нативные реализации (например, через Web Crypto API, где доступно).
finalize()| Алгоритм | Длина хеша | Устойчивость | Рекомендация |
|---|---|---|---|
| MD5 | 128 бит | низкая | не использовать |
| SHA-1 | 160 бит | скомпрометирован | избегать |
| RIPEMD-160 | 160 бит | средняя | ограниченно |
| SHA-256 | 256 бит | высокая | рекомендуется |
CryptoJS.RIPEMD160Такой подход обеспечивает гибкость и совместимость при работе с криптографическими хешами в JavaScript.