--- title: Зашифровать payload description: Подключите собственный алгоритм к полям и окончательным байтам HTTP или WebSocket. sources: - eazy_sdk.crypto api_fingerprint: "sha256:1ca897fcf483baa16619a7a70467dc11ebfff0aac70248b32279f8915da8451f" --- Алгоритм принадлежит приложению. Eazy SDK задаёт порядок преобразований, но не поставляет cipher, keyring или KMS-клиент. Алгоритм, ключи, nonce и их ротация остаются в приложении. ```{literalinclude} ../../../../../examples/mail/http/encryption.py :language: python :start-after: "# region docs: mail-encryption-profile" :end-before: "# endregion docs: mail-encryption-profile" ``` Профиль сначала шифрует выбранные поля модели, затем JSON-кодек создаёт байты и `encrypt_encoded(...)` шифрует тело целиком. Входящий ответ проходит обратные стадии. ```{literalinclude} ../../../../../examples/mail/http/encryption.py :language: python :start-after: "# region docs: encrypted-mail-operation" :end-before: "# endregion docs: encrypted-mail-operation" ``` `http_encrypted(...)` объявляет внешний и открытый `Content-Type`. Статусы из `plaintext_statuses` разрешено разбирать без расшифровки; остальные несовпадения закрывают вызов ошибкой. ```{literalinclude} ../../../../../examples/docs/encryption.py :language: python :start-after: "# region docs: encryption-run" :end-before: "# endregion docs: encryption-run" ``` :::{dropdown} Запускаемый файл целиком ```{literalinclude} ../../../../../examples/docs/encryption.py :language: python ``` ::: ```text message: 100 decrypted subject: Секретная встреча ``` ## Порядок стадий ```text исходящий: модель → поля → кодек → байты → подпись → отправка входящий: ответ → байты → кодек → поля → проверка модели ``` Подпись видит ciphertext, если операция использует и шифрование, и signing. Каждая повторная попытка заново выполняет преобразования, поэтому nonce и ciphertext предыдущей попытки не переиспользуются. Для WebSocket укажите `websocket_encrypted(...)`. Шифрование всего frame обычно требует binary frame; text разрешён только для алгоритма, который гарантирует валидный UTF-8, тогда как ping, pong и close остаются управляющими frames и вообще не проходят payload crypto. Typed metadata для key id или nonce объявляется через `CryptoResult` и связывается с конкретным wire-slot. Необъявленное, пропущенное или конфликтующее значение приводит к закрытой ошибке. ## Дальше - {doc}`Проследить байты в учебном примере ` - {doc}`Подписать окончательное тело ` - {doc}`Справочник crypto `