Алгоритмы SHA-224, SHA-384 и SHA-512 входят в семейство криптографических хеш-функций SHA-2, разработанное для обеспечения высокой криптостойкости и устойчивости к коллизиям. Они отличаются длиной выходного хеша, внутренними параметрами и областью применения.
Все три алгоритма являются криптографическими хеш-функциями, то есть:
В библиотеке CryptoJS они реализованы как отдельные функции.
Перед использованием необходимо подключить библиотеку:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
const hash = CryptoJS.SHA224("Hello, world!");
console.log(hash.toString());
Результат:
8552d8b0eecdb4c5f4f0a5f4f3d58a64e63a7b36f0a2d4cfc0d2b7d7
const hash = CryptoJS.SHA224("data");
console.log(hash.toString(CryptoJS.enc.Hex)); // Hex (по умолчанию)
console.log(hash.toString(CryptoJS.enc.Base64)); // Base64
const hash = CryptoJS.SHA384("Hello, world!");
console.log(hash.toString());
Результат:
fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
const wordArray = CryptoJS.enc.Utf8.parse("binary data");
const hash = CryptoJS.SHA384(wordArray);
console.log(hash.toString());
const hash = CryptoJS.SHA512("Hello, world!");
console.log(hash.toString());
Результат:
8710339dcb6814d0d9e8c0b2c8e6b5d8e6d7b4c9d4c8e2f1a6b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5
const sha512 = CryptoJS.algo.SHA512.create();
sha512.update("Part 1");
sha512.update("Part 2");
const hash = sha512.finalize();
console.log(hash.toString());
| Алгоритм | Длина хеша | Скорость | Уровень безопасности |
|---|---|---|---|
| SHA-224 | 224 бит | высокая | высокий |
| SHA-384 | 384 бит | средняя | очень высокий |
| SHA-512 | 512 бит | ниже | максимальный |
Все функции возвращают объект типа WordArray, а не строку.
const hash = CryptoJS.SHA512("data");
console.log(typeof hash); // object
Для получения строки необходимо вызвать:
hash.toString();
По умолчанию строки интерпретируются как UTF-8:
CryptoJS.SHA256("текст");
Для явного указания:
const data = CryptoJS.enc.Utf8.parse("текст");
CryptoJS.SHA512(data);
Хеш-функции детерминированы:
CryptoJS.SHA512("abc") === CryptoJS.SHA512("abc"); // всегда одинаково
Даже минимальное изменение входных данных полностью меняет результат:
CryptoJS.SHA512("abc");
CryptoJS.SHA512("abcd");
Хеши будут радикально отличаться (эффект лавины).
Все алгоритмы можно использовать с HMAC:
const hmac = CryptoJS.HmacSHA512("message", "secret-key");
console.log(hmac.toString());
Аналогично:
CryptoJS.HmacSHA224(...)
CryptoJS.HmacSHA384(...)
Не использовать для хранения паролей без:
Не применять как средство шифрования (это не шифр)
Учитывать производительность при работе с большими объёмами данных