CipherParams — это внутренний объект библиотеки CryptoJS, который представляет результат криптографической операции в структурированном виде. Он используется как единый контейнер для всех параметров, связанных с шифрованием или расшифрованием данных, включая сам шифротекст, ключевые параметры и метаданные алгоритма.
Объект формируется в результате выполнения операций шифрования,
например CryptoJS.AES.encrypt(). Возвращаемое значение не
является простой строкой — это полноценная структура, содержащая всю
необходимую информацию для последующего восстановления данных или их
корректной сериализации.
Основная задача CipherParams заключается в том, чтобы хранить результат криптографического преобразования в виде, пригодном как для дальнейшей обработки внутри библиотеки, так и для преобразования в строковый формат (например, Base64 или OpenSSL-совместимый формат).
Поле ciphertext содержит непосредственно зашифрованные
данные. Это объект типа WordArray, который представляет бинарные данные
в формате, используемом CryptoJS.
Именно это поле является ядром CipherParams, поскольку без него объект теряет смысл как результат шифрования.
Особенности:
Поле key содержит криптографический ключ, использованный
при шифровании. Оно присутствует не всегда и зависит от способа вызова
алгоритма и настроек.
В типичном сценарии AES-шифрования ключ может быть передан явно или сгенерирован из пароля через функцию derivation (например, PBKDF2). В таких случаях CipherParams может хранить итоговое значение ключа.
Используется:
Поле iv (Initialization Vector) содержит вектор
инициализации. Он критически важен для режимов шифрования, таких как CBC
или CFB.
Назначение IV:
IV не является секретным значением, но должен совпадать при расшифровке.
Поле salt содержит случайную добавку, используемую при
выводе ключа из пароля (например, через OpenSSL-совместимое
шифрование).
Основные свойства:
Salt не требуется напрямую для расшифровки, если ключ уже известен, но необходим при восстановлении ключа из пароля.
Поле algorithm описывает алгоритм шифрования,
использованный при создании CipherParams. Обычно это объект, содержащий
ссылку на реализацию алгоритма (например, AES, DES, TripleDES).
Содержимое может включать:
Это поле важно при десериализации, чтобы правильно интерпретировать CipherParams.
Поле mode определяет режим работы блочного шифра.
Примеры режимов:
Режим влияет на:
CipherParams сохраняет этот параметр, чтобы обеспечить корректное восстановление процесса расшифровки.
Поле padding определяет схему дополнения данных до
размера блока шифрования.
Наиболее распространённые схемы:
Padding необходим, так как блочные шифры работают с фиксированными размерами блоков, и последние байты данных часто требуют дополнения.
CipherParams хранит информацию о padding для точного восстановления исходных данных при расшифровке.
Поле formatter отвечает за сериализацию и десериализацию
CipherParams.
Formatter — это объект с двумя основными методами:
stringify(cipherParams) — преобразует CipherParams в
строкуparse(string) — восстанавливает CipherParams из
строкиЧерез formatter реализуются форматы:
Это поле играет ключевую роль при передаче зашифрованных данных между системами.
CipherParams не является статичным контейнером. Он формируется динамически в процессе выполнения криптографической операции и может содержать разный набор полей в зависимости от конфигурации.
Ключевые характеристики:
При вызове шифрования:
const encrypted = CryptoJS.AES.encrypt("text", "password");
переменная encrypted содержит CipherParams, а не строку.
Только при явном преобразовании:
encrypted.toString();
происходит сериализация через formatter.
Поля CipherParams не существуют изолированно. Они формируют связанную структуру, в которой каждый элемент отвечает за определённый аспект криптографического процесса:
ciphertext зависит от key,
iv, mode, paddingiv влияет на начальное состояние шифрованияsalt участвует в формировании keyalgorithm, mode, padding
определяют поведение преобразованияformatter объединяет все поля в сериализуемый
форматТакая связность позволяет объекту полностью описывать результат шифрования без потери информации при передаче или хранении.