Crypto-js — это популярная JavaScript-библиотека, предназначенная для выполнения криптографических операций на стороне клиента и сервера. Она широко применяется в веб-приложениях для защиты данных, реализации аутентификации, шифрования конфиденциальной информации и проверки целостности.
Библиотека написана на чистом JavaScript и не требует нативных расширений, что делает её удобной для использования как в браузере, так и в среде Node.js. Архитектура построена модульно, что позволяет подключать только необходимые компоненты.
Crypto-js реализует набор базовых и широко используемых криптографических алгоритмов.
Хеширование используется для получения фиксированной длины строки (хеша) из входных данных произвольного размера.
Поддерживаемые алгоритмы:
Особенности:
Пример:
const hash = CryptoJS.SHA256("message").toString();
HMAC сочетает хеш-функцию с секретным ключом для проверки подлинности сообщения.
Поддерживаются:
Пример:
const hmac = CryptoJS.HmacSHA256("message", "secret-key").toString();
Назначение:
Crypto-js реализует алгоритмы симметричного шифрования, где один и тот же ключ используется для шифрования и расшифровки.
Поддерживаемые алгоритмы:
Пример AES:
const encrypted = CryptoJS.AES.encrypt("secret data", "password").toString();
const decrypted = CryptoJS.AES.decrypt(encrypted, "password");
const originalText = decrypted.toString(CryptoJS.enc.Utf8);
Особенности:
Crypto-js работает с внутренним форматом данных WordArray, который представляет бинарные данные.
Поддерживаются различные кодировки:
Примеры преобразований:
const utf8 = CryptoJS.enc.Utf8.parse("text");
const hex = utf8.toString(CryptoJS.enc.Hex);
Значение:
При шифровании и хешировании часто используется соль — случайное значение, добавляемое к данным для повышения безопасности.
Crypto-js автоматически добавляет соль при использовании паролей:
const encrypted = CryptoJS.AES.encrypt("data", "password");
Внутри:
Crypto-js поддерживает PBKDF2 — алгоритм для генерации криптографически стойкого ключа из пароля.
Пример:
const key = CryptoJS.PBKDF2("password", "salt", {
keySize: 256/32,
iterations: 1000
});
Параметры:
Назначение:
Crypto-js предоставляет механизм генерации случайных значений:
const random = CryptoJS.lib.WordArray.random(16);
Используется для:
Для повышения безопасности симметричного шифрования используется IV — случайное значение, добавляемое к данным перед шифрованием.
Пример:
const iv = CryptoJS.lib.WordArray.random(16);
const encrypted = CryptoJS.AES.encrypt("data", key, { iv: iv });
Назначение:
AES в Crypto-js поддерживает несколько режимов работы:
Пример:
CryptoJS.AES.encrypt("data", key, {
mode: CryptoJS.mode.CBC
});
Различия:
При шифровании данные должны быть кратны размеру блока. Для этого используются схемы дополнения:
Пример:
CryptoJS.AES.encrypt("data", key, {
padding: CryptoJS.pad.Pkcs7
});
Некоторые алгоритмы (например, RC4, Rabbit) работают как потоковые шифры.
Особенности:
Пример:
CryptoJS.RC4.encrypt("data", "key");
Crypto-js позволяет:
Архитектура основана на прототипном наследовании, что упрощает расширение функциональности.
Преимущества:
Ограничения:
Crypto-js:
Web Crypto API:
Выбор зависит от требований проекта и среды выполнения.