Объект CipherParams и его поля

CipherParams — это внутренний объект библиотеки CryptoJS, который представляет результат криптографической операции в структурированном виде. Он используется как единый контейнер для всех параметров, связанных с шифрованием или расшифрованием данных, включая сам шифротекст, ключевые параметры и метаданные алгоритма.

Объект формируется в результате выполнения операций шифрования, например CryptoJS.AES.encrypt(). Возвращаемое значение не является простой строкой — это полноценная структура, содержащая всю необходимую информацию для последующего восстановления данных или их корректной сериализации.

Основная задача CipherParams заключается в том, чтобы хранить результат криптографического преобразования в виде, пригодном как для дальнейшей обработки внутри библиотеки, так и для преобразования в строковый формат (например, Base64 или OpenSSL-совместимый формат).

ciphertext

Поле ciphertext содержит непосредственно зашифрованные данные. Это объект типа WordArray, который представляет бинарные данные в формате, используемом CryptoJS.

Именно это поле является ядром CipherParams, поскольку без него объект теряет смысл как результат шифрования.

Особенности:

  • хранит зашифрованный массив байтов
  • не содержит метаданных
  • не пригоден для прямого чтения человеком
  • может быть преобразован в строку через encoder (Base64, Hex и др.)

key

Поле key содержит криптографический ключ, использованный при шифровании. Оно присутствует не всегда и зависит от способа вызова алгоритма и настроек.

В типичном сценарии AES-шифрования ключ может быть передан явно или сгенерирован из пароля через функцию derivation (например, PBKDF2). В таких случаях CipherParams может хранить итоговое значение ключа.

Используется:

  • при повторном шифровании
  • при отладке криптографического процесса
  • в нестандартных режимах сериализации

iv

Поле iv (Initialization Vector) содержит вектор инициализации. Он критически важен для режимов шифрования, таких как CBC или CFB.

Назначение IV:

  • обеспечивает уникальность шифрования при одинаковом ключе
  • предотвращает детерминированность результата
  • используется при расшифровке вместе с ключом

IV не является секретным значением, но должен совпадать при расшифровке.

salt

Поле salt содержит случайную добавку, используемую при выводе ключа из пароля (например, через OpenSSL-совместимое шифрование).

Основные свойства:

  • используется только при key derivation
  • повышает стойкость к атакам по словарю
  • хранится вместе с шифротекстом для возможности восстановления ключа

Salt не требуется напрямую для расшифровки, если ключ уже известен, но необходим при восстановлении ключа из пароля.

algorithm

Поле algorithm описывает алгоритм шифрования, использованный при создании CipherParams. Обычно это объект, содержащий ссылку на реализацию алгоритма (например, AES, DES, TripleDES).

Содержимое может включать:

  • имя алгоритма
  • параметры режима работы
  • внутренние настройки блока шифрования

Это поле важно при десериализации, чтобы правильно интерпретировать CipherParams.

mode

Поле mode определяет режим работы блочного шифра.

Примеры режимов:

  • CBC (Cipher Block Chaining)
  • ECB (Electronic Codebook)
  • CFB (Cipher Feedback)
  • OFB (Output Feedback)

Режим влияет на:

  • способ обработки блоков данных
  • необходимость IV
  • устойчивость к криптоанализу

CipherParams сохраняет этот параметр, чтобы обеспечить корректное восстановление процесса расшифровки.

padding

Поле padding определяет схему дополнения данных до размера блока шифрования.

Наиболее распространённые схемы:

  • PKCS7Padding
  • ZeroPadding

Padding необходим, так как блочные шифры работают с фиксированными размерами блоков, и последние байты данных часто требуют дополнения.

CipherParams хранит информацию о padding для точного восстановления исходных данных при расшифровке.

formatter

Поле formatter отвечает за сериализацию и десериализацию CipherParams.

Formatter — это объект с двумя основными методами:

  • stringify(cipherParams) — преобразует CipherParams в строку
  • parse(string) — восстанавливает CipherParams из строки

Через formatter реализуются форматы:

  • Base64
  • OpenSSL-compatible формат
  • Hex и пользовательские форматы

Это поле играет ключевую роль при передаче зашифрованных данных между системами.

Особенности структуры CipherParams

CipherParams не является статичным контейнером. Он формируется динамически в процессе выполнения криптографической операции и может содержать разный набор полей в зависимости от конфигурации.

Ключевые характеристики:

  • гибкая структура (не все поля обязательны)
  • ориентирован на внутреннюю работу CryptoJS
  • поддерживает расширяемую сериализацию
  • хранит как данные, так и метаданные операции

При вызове шифрования:

const encrypted = CryptoJS.AES.encrypt("text", "password");

переменная encrypted содержит CipherParams, а не строку. Только при явном преобразовании:

encrypted.toString();

происходит сериализация через formatter.

Взаимосвязь полей

Поля CipherParams не существуют изолированно. Они формируют связанную структуру, в которой каждый элемент отвечает за определённый аспект криптографического процесса:

  • ciphertext зависит от key, iv, mode, padding
  • iv влияет на начальное состояние шифрования
  • salt участвует в формировании key
  • algorithm, mode, padding определяют поведение преобразования
  • formatter объединяет все поля в сериализуемый формат

Такая связность позволяет объекту полностью описывать результат шифрования без потери информации при передаче или хранении.