Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11149 глав4458 карточек справочника
Дерево руководства

Глава 96 · От первой защищённой записи до протокола

Sodium: полный справочник шифрования, подписей, паролей и ключей

Все 110 функций и 102 константы Sodium: от первого Secretbox до AEAD, Box, подписей, password hashing, потоков, KDF/KX и низкоуровневых границ.

Первая полезная задача: сохранить API-токен так, чтобы подмена обнаружилась

Допустим, сервис хранит токен внешнего API. Обычный Base64 только меняет запись: любой, кто прочитал файл или базу, получает токен. Secretbox решает две задачи одновременно: скрывает текст и обнаруживает изменение записи. Для этого нужен один случайный секретный ключ. Он живёт в отдельном secret manager/переменной окружения с ограниченным доступом; в базе лежат версия формата, публичный nonce и ciphertext.

Что происходит с записью
  1. Приложение читает 32-байтовый ключ из отдельной границы доверия
  2. Для одной записи создаёт новый 24-байтовый nonce
  3. Secretbox превращает токен в ciphertext + authenticator
  4. Nonce и ciphertext кодируются для текстового поля; ключ туда не входит
  5. При чтении open либо возвращает исходный токен, либо строго false при подмене/неверном ключе

Сначала разберём маленький самостоятельный вызов. $key — переменная с ключом, $nonce — номер конкретной записи, $cipher — бинарный результат. === false отличает отказ проверки от допустимой пустой строки.

Зашифровать, открыть и увидеть отказ после подменыСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$cipher = sodium_crypto_secretbox('demo-api-token', $nonce, $key);

$plain = sodium_crypto_secretbox_open($cipher, $nonce, $key);
echo 'прочитано: ', $plain, "\n";

$cipher[0] = chr(ord($cipher[0]) ^ 1);
$tampered = sodium_crypto_secretbox_open($cipher, $nonce, $key);
echo $tampered === false ? "подмена отклонена\n" : "подмена пропущена\n";
Ожидаемый результат
прочитано: demo-api-token
подмена отклонена

Это локальная демонстрация. В реальном проекте ключ не генерируют заново при каждом чтении: его создают один раз, сохраняют вне таблицы с ciphertext, резервируют и планируют ротацию. Nonce не секретен и хранится рядом с записью.

Подробные карточки: sodium_crypto_secretbox, sodium_crypto_secretbox_open, sodium_crypto_secretbox_keygen.

Карта Sodium: выбрать инструмент по реальной задаче

Название алгоритма — плохая отправная точка для новичка. Начните с того, что должно получить приложение. В большинстве прикладных задач нужен высокоуровневый примитив, который сразу проверяет целостность; raw stream и групповая арифметика оставлены для уже спроектированных протоколов.

ЗадачаВыборЧто хранить/передать
Скрыть поле базы одним серверным ключомSecretboxversion + nonce + ciphertext; ключ отдельно
Привязать шифротекст к ID заказа/заголовкуXChaCha20-Poly1305 AEADnonce + AAD + ciphertext; AAD остаётся открытым
Клиент шифрует серверу, зная только public keySealed boxpublic key сервера и ciphertext; отправитель анонимен
Два известных участника обмениваются сообщениямиBoxключи сторон + уникальный nonce + ciphertext
Подтвердить релиз публичноDetached signatureсообщение + signature + доверенный public key
Подтвердить webhook общим секретомMACmessage + MAC; общий key у двух сторон
Хранить пароль аккаунтаpwhash_str или password_hashсамодостаточная hash-строка
Получить ключ шифрования из пароляraw pwhashsalt + algo + limits; результат — secret key
Шифровать большой архив по блокамSecretstreamheader + упорядоченные блоки + обязательный FINAL
Развести ключи подсистем от одного master keyKDFmaster отдельно; фиксированные context и ID в спецификации

До криптографии: raw bytes, hex, Base64 и почему формат ломает открытие

Ключ, nonce, подпись и ciphertext — бинарные PHP-строки. Они могут содержать нулевой байт и не обязаны быть UTF-8. JSON, HTML-форма и переменная окружения требуют текстового представления: обычно Base64 URL-safe либо hex. Кодирование обратимо и не скрывает данные.

Граница транспорта
  1. Функция Sodium возвращает raw bytes
  2. Перед JSON/формой: bin2base64 или bin2hex
  3. Получатель проверяет выбранный вариант и строго декодирует
  4. Проверяет длину и использует raw bytes в том же примитиве
  5. false/исключение останавливает обработку; испорченные байты не «чинят» обрезкой
Передать бинарный nonce через JSON без потери байтовСамостоятельный пример
<?php
declare(strict_types=1);

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$text = sodium_bin2base64($nonce, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
$json = json_encode(['nonce' => $text], JSON_THROW_ON_ERROR);

$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
$restored = sodium_base642bin(
    $data['nonce'],
    SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING
);
echo 'кодировано: ', strlen($text), ' знака', "\n";
echo 'байты совпали: ', hash_equals($nonce, $restored) ? 'да' : 'нет', "\n";
echo 'длина: ', strlen($restored), "\n";
Ожидаемый результат
кодировано: 32 знака
байты совпали: да
длина: 24

Base64 случаен из-за nonce, поэтому наружу выводятся его стабильная длина, совпадение восстановленных байтов и их длина. В интерфейсе важны выбранный вариант, обратное декодирование и точная длина.

Карточки кодирования: sodium_bin2base64, sodium_base642bin, sodium_bin2hex, sodium_hex2bin.

Жизненный цикл ключа: создание, хранение, версия, ротация и удаление

Ключ — не строка, которую разработчик придумывает руками. Keygen создаёт правильное число случайных байтов. Его текстово кодируют только для совместимого секретного хранилища, ограничивают права чтения и никогда не кладут рядом с зашифрованными данными как единственный слой защиты.

СобытиеПрактическое решение
СозданиеОдин раз вызвать keygen в закрытой административной операции; не печатать ключ в общий лог.
ИдентификацияУ каждой записи хранить version/key_id без самого ключа.
ЧтениеПо key_id получить ключ из secret manager и строго открыть запись.
РотацияНовые записи шифровать новым ключом; старые читать прежним и мигрировать контролируемо.
Резервная копияКлюч резервируют отдельно и проверяют восстановление; потеря ключа означает потерю данных.
КомпрометацияОстановить использование, заменить секреты upstream, выпустить новую версию ключа и определить затронутые данные.
Затираниеsodium_memzero сокращает жизнь конкретного буфера, но не удаляет прежние копии, дампы и журнал.

Практический вопрос «где хранить ключ?» не имеет ответа «зашифровать его тем же ключом». Для одного сервера это может быть переменная окружения/файл вне web-root с минимальными правами, лучше — KMS/secret manager. Модель угроз и инфраструктура определяют выбор.

Установка, требования и проверка именно того PHP-процесса

Sodium входит в PHP начиная с 7.2. Для сборки нужна libsodium не ниже 1.0.8; в Windows расширение встроено в современную поставку PHP. Официальная страница установки также описывает старый PECL-путь для PHP до 7.2 — это историческая совместимость, а не инструкция для PHP 8.5.

Проверить расширение и версию библиотеки без phpinfoСамостоятельный пример
<?php
declare(strict_types=1);

echo 'PHP: ', PHP_VERSION, "\n";
echo 'Sodium: ', extension_loaded('sodium') ? 'есть' : 'нет', "\n";
echo 'libsodium: ', SODIUM_LIBRARY_VERSION, "\n";
echo 'функций: ', count(get_extension_funcs('sodium')), "\n";
Ожидаемый результат
PHP: 8.5.11
Sodium: есть
libsodium: 1.0.22
функций: 110

Проверка относится к CLI, которым выполнен пример. Веб-сервер может использовать другой бинарник/ini; диагностику запускают в нужном SAPI, но не публикуют наружу phpinfo.

Официальный узелЧто фиксирует
IntroductionВысокоуровневый интерфейс современной криптографии; не набор взаимозаменяемых алгоритмов.
Requirementslibsodium ≥ 1.0.8; отдельные новые функции требуют более свежей версии.
InstallationВ составе PHP 7.2+; для старых веток существовал PECL.
Runtime configurationУ расширения нет пользовательских INI-настроек, которые заменяли бы проверку API/возможности.
ResourcesОтдельного resource-типа нет: API работает со строками, массивами и изменяемым state.

Все 102 константы текущего API: размеры, профили и теги

Константы не являются настройками, которые можно свободно уменьшать. Длины принадлежат конкретному примитиву: nonce Secretbox нельзя подставить в Box только потому, что оба значения называются nonce. Профили PWHASH выбирают парой opslimit + memlimit и проверяют на целевом сервере.

Версия библиотеки

ИмяPHP 8.5.11Смысл
SODIUM_LIBRARY_VERSION1.0.22фактическая версия связанной libsodium
SODIUM_LIBRARY_MAJOR_VERSION26фактическая версия связанной libsodium
SODIUM_LIBRARY_MINOR_VERSION4фактическая версия связанной libsodium

AEAD

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES12длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES16служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES16длина ключа в байтах
SODIUM_CRYPTO_AEAD_AEGIS128L_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES16длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_AEGIS128L_ABYTES32служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_AEAD_AEGIS256_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES32длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES32служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES8длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES16служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES12длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES16служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES0длина секретного nonce; обычно 0, параметр не передаётся
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES24длина публичного nonce в байтах
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES16служебные байты аутентификатора сверх открытого текста

MAC

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_AUTH_BYTES32длина основного результата в байтах
SODIUM_CRYPTO_AUTH_KEYBYTES32длина ключа в байтах

Box

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_BOX_SEALBYTES48официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_BOX_SECRETKEYBYTES32длина секретного ключа
SODIUM_CRYPTO_BOX_PUBLICKEYBYTES32длина открытого ключа
SODIUM_CRYPTO_BOX_KEYPAIRBYTES64длина упакованной пары ключей
SODIUM_CRYPTO_BOX_MACBYTES16длина кода аутентификации
SODIUM_CRYPTO_BOX_NONCEBYTES24длина nonce в байтах
SODIUM_CRYPTO_BOX_SEEDBYTES32строгая длина seed

KDF

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_KDF_BYTES_MIN16минимальная длина результата
SODIUM_CRYPTO_KDF_BYTES_MAX64максимальная длина результата
SODIUM_CRYPTO_KDF_CONTEXTBYTES8строгая длина контекста KDF
SODIUM_CRYPTO_KDF_KEYBYTES32длина ключа в байтах

KX

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_KX_SEEDBYTES32строгая длина seed
SODIUM_CRYPTO_KX_SESSIONKEYBYTES32официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_KX_PUBLICKEYBYTES32длина открытого ключа
SODIUM_CRYPTO_KX_SECRETKEYBYTES32длина секретного ключа
SODIUM_CRYPTO_KX_KEYPAIRBYTES64длина упакованной пары ключей

Secretstream

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES17служебные байты аутентификатора сверх открытого текста
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES24длина публичного заголовка потока
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX274877906816официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE0тег границы/состояния блока secretstream
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH1тег границы/состояния блока secretstream
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY2тег границы/состояния блока secretstream
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL3тег границы/состояния блока secretstream

Generichash

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_GENERICHASH_BYTES32длина основного результата в байтах
SODIUM_CRYPTO_GENERICHASH_BYTES_MIN16минимальная длина результата
SODIUM_CRYPTO_GENERICHASH_BYTES_MAX64максимальная длина результата
SODIUM_CRYPTO_GENERICHASH_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN16официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX64официальная константа алгоритма или его допустимой границы

Password hashing

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_PWHASH_ALG_ARGON2I131идентификатор варианта password hashing
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID132идентификатор варианта password hashing
SODIUM_CRYPTO_PWHASH_ALG_DEFAULT2идентификатор варианта password hashing
SODIUM_CRYPTO_PWHASH_SALTBYTES16строгая длина соли
SODIUM_CRYPTO_PWHASH_STRPREFIX$argon2id$официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE2готовый профиль вычислительной работы
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE67108864готовый профиль памяти в байтах
SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE3готовый профиль вычислительной работы
SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE268435456готовый профиль памяти в байтах
SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE4готовый профиль вычислительной работы
SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE1073741824готовый профиль памяти в байтах
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES32строгая длина соли
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX$7$официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE524288готовый профиль вычислительной работы
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE16777216готовый профиль памяти в байтах
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE33554432готовый профиль вычислительной работы
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE1073741824готовый профиль памяти в байтах

Scalarmult

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_SCALARMULT_BYTES32длина основного результата в байтах
SODIUM_CRYPTO_SCALARMULT_SCALARBYTES32официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES32длина основного результата в байтах
SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES32официальная константа алгоритма или его допустимой границы

Shorthash

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_SHORTHASH_BYTES8длина основного результата в байтах
SODIUM_CRYPTO_SHORTHASH_KEYBYTES16длина ключа в байтах

Secretbox

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_SECRETBOX_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_SECRETBOX_MACBYTES16длина кода аутентификации
SODIUM_CRYPTO_SECRETBOX_NONCEBYTES24длина nonce в байтах

Подписи

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_SIGN_BYTES64длина основного результата в байтах
SODIUM_CRYPTO_SIGN_SEEDBYTES32строгая длина seed
SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES32длина открытого ключа
SODIUM_CRYPTO_SIGN_SECRETKEYBYTES64длина секретного ключа
SODIUM_CRYPTO_SIGN_KEYPAIRBYTES96длина упакованной пары ключей

Потоковые примитивы

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_STREAM_NONCEBYTES24длина nonce в байтах
SODIUM_CRYPTO_STREAM_KEYBYTES32длина ключа в байтах
SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES24длина nonce в байтах
SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES32длина ключа в байтах

Варианты Base64

ИмяPHP 8.5.11Смысл
SODIUM_BASE64_VARIANT_ORIGINAL1вариант алфавита и padding Base64
SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING3вариант алфавита и padding Base64
SODIUM_BASE64_VARIANT_URLSAFE5вариант алфавита и padding Base64
SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING7вариант алфавита и padding Base64

Ristretto255

ИмяPHP 8.5.11Смысл
SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES32длина основного результата в байтах
SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES64официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES32официальная константа алгоритма или его допустимой границы
SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES64официальная константа алгоритма или его допустимой границы

SodiumException: ошибка контракта отличается от отказа проверки

SodiumException наследует Exception и не добавляет собственных методов. Она сообщает, что операция не может быть выполнена: например, длина nonce/key неверна. Это отличается от false у open/decrypt/verify, когда вход имеет допустимую форму, но криптографическая проверка не прошла.

Разделить неверную длину и подменённый ciphertextСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretbox_keygen();
try {
    sodium_crypto_secretbox('data', 'short', $key);
} catch (SodiumException $error) {
    echo "неверная длина nonce\n";
}

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$cipher = sodium_crypto_secretbox('data', $nonce, $key);
$cipher[0] = chr(ord($cipher[0]) ^ 1);
echo sodium_crypto_secretbox_open($cipher, $nonce, $key) === false
    ? "проверка сообщения не прошла\n" : "ошибка\n";
Ожидаемый результат
неверная длина nonce
проверка сообщения не прошла

Первое — ошибка программиста/формата и диагностируется без секретов. Второе — недоверенные данные; приложение отвечает нейтрально и не раскрывает, какой именно байт не совпал.

AEAD: шифрование и связанные данные: все функции семейства

AEAD скрывает сообщение и привязывает к нему открытый контекст. На практике AAD удобно использовать для ID заказа, версии протокола или направления сообщения.

  • sodium_crypto_aead_aes256gcm_is_available — Операция Sodium: crypto aead aes256gcm is available.
  • sodium_crypto_aead_aes256gcm_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_aes256gcm_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
  • sodium_crypto_aead_aes256gcm_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_aegis128l_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_aegis128l_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
  • sodium_crypto_aead_aegis128l_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_aegis256_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_aegis256_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
  • sodium_crypto_aead_aegis256_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_chacha20poly1305_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_chacha20poly1305_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
  • sodium_crypto_aead_chacha20poly1305_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_chacha20poly1305_ietf_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_chacha20poly1305_ietf_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
  • sodium_crypto_aead_chacha20poly1305_ietf_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_xchacha20poly1305_ietf_decrypt — Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.
  • sodium_crypto_aead_xchacha20poly1305_ietf_keygen — Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.
  • sodium_crypto_aead_xchacha20poly1305_ietf_encrypt — Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

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

MAC: подлинность сообщения: все функции семейства

MAC подтверждает сообщение между сторонами с общим ключом. Он проще подписи, когда публичная проверка не нужна.

  • sodium_crypto_auth — Создать или проверить MAC для сообщения с общим секретным ключом.
  • sodium_crypto_auth_keygen — Создать криптографически случайный ключ правильной длины для семейства MAC: подлинность сообщения.
  • sodium_crypto_auth_verify — Проверить криптографическое подтверждение, не раскрывая секретный ключ.

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

Box и sealed box: два участника: все функции семейства

Box использует ключи двух известных сторон; sealed box позволяет отправить получателю, имея только его public key, но скрывает личность отправителя.

  • sodium_crypto_box — Защитить сообщение между участниками с помощью их открытых и секретных ключей.
  • sodium_crypto_box_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_box_seed_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_box_keypair_from_secretkey_and_publickey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_box_open — Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
  • sodium_crypto_box_publickey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_box_publickey_from_secretkey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_box_seal — Защитить сообщение между участниками с помощью их открытых и секретных ключей.
  • sodium_crypto_box_seal_open — Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
  • sodium_crypto_box_secretkey — Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

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

Ristretto255: низкоуровневая групповая арифметика: все функции семейства

Ristretto255 предоставляет безопасное представление группы, но остаётся инструментом автора криптографического протокола. Новичок обычно не должен начинать с этих функций.

  • sodium_crypto_core_ristretto255_add — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_from_hash — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_is_valid_point — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_random — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_add — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_complement — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_invert — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_mul — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_negate — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_random — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_reduce — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_scalar_sub — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_core_ristretto255_sub — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

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

Обмен ключами клиента и сервера: все функции семейства

KX превращает пары клиента/сервера в два направленных ключа сессии, устраняя ручное конструирование shared-secret контекста.

  • sodium_crypto_kx_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_kx_publickey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_kx_secretkey — Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.
  • sodium_crypto_kx_seed_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_kx_client_session_keys — Получить направленные ключи сессии клиента и сервера без передачи самих секретных ключей.
  • sodium_crypto_kx_server_session_keys — Получить направленные ключи сессии клиента и сервера без передачи самих секретных ключей.

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

Универсальный хеш и потоковый хеш: все функции семейства

Generichash (BLAKE2b) работает одним вызовом или потоком. Keyed-режим и обычный digest имеют разную модель доверия.

  • sodium_crypto_generichash — Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.
  • sodium_crypto_generichash_keygen — Создать криптографически случайный ключ правильной длины для семейства Универсальный хеш и потоковый хеш.
  • sodium_crypto_generichash_init — Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.
  • sodium_crypto_generichash_update — Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.
  • sodium_crypto_generichash_final — Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

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

Производные ключи одного приложения: все функции семейства

KDF разводит назначения ключей: компрометация ключа загрузок не должна раскрывать ключ заказов, хотя оба произошли от одного master.

  • sodium_crypto_kdf_derive_from_key — Получить отдельный ключ назначения из master key, контекста и числового ID.
  • sodium_crypto_kdf_keygen — Создать криптографически случайный ключ правильной длины для семейства Производные ключи одного приложения.

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

Пароли и получение ключа из пароля: все функции семейства

Функции делятся на самодостаточную строку для проверки аккаунта и низкоуровневый бинарный ключ из password+salt+параметров.

  • sodium_crypto_pwhash — Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.
  • sodium_crypto_pwhash_str — Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.
  • sodium_crypto_pwhash_str_verify — Проверить криптографическое подтверждение, не раскрывая секретный ключ.
  • sodium_crypto_pwhash_str_needs_rehash — Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.
  • sodium_crypto_pwhash_scryptsalsa208sha256 — Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.
  • sodium_crypto_pwhash_scryptsalsa208sha256_str — Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.
  • sodium_crypto_pwhash_scryptsalsa208sha256_str_verify — Проверить криптографическое подтверждение, не раскрывая секретный ключ.

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

Скалярное умножение и общая тайна: все функции семейства

Scalarmult — низкоуровневая общая тайна. KX предпочтительнее для сессии, потому что задаёт роли и разделяет направления.

  • sodium_crypto_scalarmult — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_scalarmult_ristretto255 — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_scalarmult_ristretto255_base — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
  • sodium_crypto_scalarmult_base — Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

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

Secretbox: общий секретный ключ: все функции семейства

Secretbox — практичный выбор для полей базы/локальных секретов с одним серверным ключом.

  • sodium_crypto_secretbox — Операция Sodium: crypto secretbox.
  • sodium_crypto_secretbox_keygen — Создать криптографически случайный ключ правильной длины для семейства Secretbox: общий секретный ключ.
  • sodium_crypto_secretbox_open — Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

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

Secretstream: большие и потоковые данные: все функции семейства

Secretstream защищает последовательность блоков, отличает сообщения, смену ключа и конец потока.

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

Короткий keyed-хеш для внутренних таблиц: все функции семейства

Shorthash защищает внутренние хеш-таблицы от управляемых коллизий. Короткий результат не подходит для паролей и внешних подписей.

  • sodium_crypto_shorthash — Получить короткий keyed-хеш для внутренней хеш-таблицы; это не подпись и не хеш пароля.
  • sodium_crypto_shorthash_keygen — Создать криптографически случайный ключ правильной длины для семейства Короткий keyed-хеш для внутренних таблиц.

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

Цифровые подписи Ed25519: все функции семейства

Подпись подтверждается открытым ключом и не скрывает данные. Detached-форма удобна для файла/manifest, attached — для одного бинарного пакета.

  • sodium_crypto_sign — Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.
  • sodium_crypto_sign_detached — Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.
  • sodium_crypto_sign_ed25519_pk_to_curve25519 — Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.
  • sodium_crypto_sign_ed25519_sk_to_curve25519 — Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.
  • sodium_crypto_sign_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_sign_keypair_from_secretkey_and_publickey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_sign_open — Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
  • sodium_crypto_sign_publickey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_sign_secretkey — Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.
  • sodium_crypto_sign_publickey_from_secretkey — Извлечь открытый ключ из упакованной пары или секретного ключа.
  • sodium_crypto_sign_seed_keypair — Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
  • sodium_crypto_sign_verify_detached — Проверить криптографическое подтверждение, не раскрывая секретный ключ.

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

Потоковые шифры низкого уровня: все функции семейства

Raw stream/XOR оставлен для совместимых протоколов. Он не обнаруживает подмену, поэтому не является обычным выбором приложения.

  • sodium_crypto_stream — Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
  • sodium_crypto_stream_keygen — Создать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.
  • sodium_crypto_stream_xor — Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
  • sodium_crypto_stream_xchacha20 — Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
  • sodium_crypto_stream_xchacha20_keygen — Создать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.
  • sodium_crypto_stream_xchacha20_xor — Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
  • sodium_crypto_stream_xchacha20_xor_ic — Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

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

Байты, кодирование, сравнение и очистка памяти: все функции семейства

Вспомогательные операции работают с байтами: кодируют транспорт, сравнивают, изменяют little-endian счётчик, дополняют или затирают буфер.

  • sodium_add — Сложить два больших беззнаковых числа в little-endian представлении по модулю размера буфера.
  • sodium_compare — Сравнить два больших беззнаковых little-endian числа за постоянное время.
  • sodium_increment — Увеличить большое little-endian число в изменяемой строке.
  • sodium_memcmp — Сравнить две бинарные строки одинаковой длины за постоянное время.
  • sodium_memzero — Затереть содержимое изменяемой строки в памяти текущего PHP-процесса.
  • sodium_pad — Дополнить строку до кратной блоку длины по схеме libsodium.
  • sodium_unpad — Проверить и снять дополнение libsodium.
  • sodium_bin2hex — Представить бинарные байты печатной шестнадцатеричной строкой.
  • sodium_hex2bin — Преобразовать проверенную hex-строку обратно в бинарные байты.
  • sodium_bin2base64 — Закодировать бинарные данные выбранным вариантом Base64.
  • sodium_base642bin — Строго декодировать выбранный вариант Base64 в исходные байты.

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

Типовые ошибки из реальной разработки и как их локализовать

СимптомЧто проверить по порядку
open/decrypt вернул falseBase64/hex уже декодирован? Та же версия примитива, key, nonce, AAD? Не обрезался ciphertext? Проверять строго === false.
SodiumException о длинеstrlen raw bytes и константа именно выбранного семейства; не mb_strlen и не длина Base64.
На другом языке не открываетсяRaw key против PEM/объекта библиотеки, вариант Base64, порядок полей, nonce/AAD и точные bytes тестового fixture.
После рестарта старые записи не читаютсяКлюч не должен генерироваться на каждый запуск; проверить key_id, секретное хранилище и резервную копию.
Пароль всегда даёт другой hashЭто нормально из-за случайной соли; использовать verify, а не сравнение двух вновь созданных строк.
Secretstream прочитал часть файлаТребовать FINAL, порядок всех блоков и отсутствие false на каждом pull.
Подпись «не совпадает»Проверяется исходное сообщение, не его заново сериализованная версия; public key должен соответствовать secret key и формату Ed25519.
Данные есть в логе/дампеmemzero не удаляет копии; убрать секреты из логирования и ограничить трассировки/дампы процесса.

Отладочная fixture должна использовать несекретные фиксированные данные и показывать точные байты на каждой границе. Не отправляйте production-ключи в онлайн-декодер и не добавляйте их в тикет.

Маршрут изучения и контроль готовности

От простого к безопасному сервису
  1. Понять PHP-строку как контейнер байтов и обратимое кодирование
  2. Выполнить secretbox round-trip и увидеть false после подмены
  3. Спроектировать формат version + key_id + nonce/header + ciphertext
  4. Выбрать AEAD/box/signature/password API по задаче, а не по названию алгоритма
  5. Добавить ротацию, резервное восстановление и нейтральную обработку отказов
  6. Зафиксировать межъязыковые fixtures и негативные тесты
  7. Только для готового протокола переходить к KX/scalarmult/Ristretto/raw stream
  • Могу объяснить, почему ключ хранится отдельно от ciphertext и почему nonce можно передавать открыто.
  • Различаю Base64 и шифрование, MAC и подпись, password verifier и производный ключ.
  • Всегда проверяю false до использования plaintext и не логирую секретные аргументы.
  • Знаю, что произойдёт при потере/компрометации ключа, и проверил восстановление резервной копии.
  • Для своего формата записал версию, размеры, порядок полей, вариант кодирования и обязательные отрицательные тесты.

Связанные главы: безопасность приложения, пароли, хеши и HMAC, официальная ветка OpenSSL, JSON.

Функции и методы этой темы

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

sodium_crypto_aead_aes256gcm_is_availableОперация Sodium: crypto aead aes256gcm is available.

PHP 7.2+ · sodium

sodium_crypto_aead_aes256gcm_is_available(): bool

Операция Sodium: crypto aead aes256gcm is available.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aes256gcm_is_available(): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aes256gcm_is_available: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$available = sodium_crypto_aead_aes256gcm_is_available();
echo $available ? "AES-GCM: доступен\n" : "AES-GCM: недоступен\n";
Ожидаемый результат
AES-GCM: доступен

Проверка относится к текущей машине. Переносимый формат не должен молча рассчитывать, что AES-GCM есть в каждой сборке.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt, sodium_crypto_aead_aegis128l_encrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aes256gcm_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 7.2+ · sodium

sodium_crypto_aead_aes256gcm_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aes256gcm_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aes256gcm_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

if (!sodium_crypto_aead_aes256gcm_is_available()) { echo "AES-GCM: недоступен\n"; return; }
$key = sodium_crypto_aead_aes256gcm_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aes256gcm_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aes256gcm_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aes256gcm_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt, sodium_crypto_aead_aegis128l_encrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aes256gcm_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 7.2+ · sodium

sodium_crypto_aead_aes256gcm_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aes256gcm_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aes256gcm_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

if (!sodium_crypto_aead_aes256gcm_is_available()) { echo "AES-GCM: недоступен\n"; return; }
$key = sodium_crypto_aead_aes256gcm_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aes256gcm_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aes256gcm_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aes256gcm_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt, sodium_crypto_aead_aegis128l_encrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aes256gcm_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 7.2+ · sodium

sodium_crypto_aead_aes256gcm_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aes256gcm_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aes256gcm_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aes256gcm_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aegis128l_decrypt, sodium_crypto_aead_aegis128l_encrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis128l_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis128l_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis128l_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis128l_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis128l_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aegis128l_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aegis128l_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aegis128l_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_encrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis128l_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis128l_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis128l_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis128l_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis128l_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aegis128l_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aegis128l_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aegis128l_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis128l_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis128l_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis128l_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis128l_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis128l_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 16 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis256_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis256_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis256_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis256_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis256_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aegis256_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aegis256_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aegis256_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis256_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis256_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis256_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis256_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis256_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_aegis256_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_aegis256_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_aegis256_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_aegis256_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 8.4+ · sodium

sodium_crypto_aead_aegis256_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_aegis256_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.4+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_aegis256_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_aegis256_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_chacha20poly1305_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_chacha20poly1305_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_chacha20poly1305_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_chacha20poly1305_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_chacha20poly1305_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_chacha20poly1305_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_ietf_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_ietf_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_ietf_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_ietf_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_chacha20poly1305_ietf_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 7.2+ · sodium

sodium_crypto_aead_chacha20poly1305_ietf_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_chacha20poly1305_ietf_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_chacha20poly1305_ietf_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_xchacha20poly1305_ietf_decryptПроверить целостность и расшифровать сообщение; вернуть <code>false</code>, если ключ, nonce, AAD или шифротекст не совпали.

PHP 7.2+ · sodium

sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false

Проверить целостность и расшифровать сообщение; вернуть false, если ключ, nonce, AAD или шифротекст не совпали.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_xchacha20poly1305_ietf_decrypt(string $ciphertext, string $additional_data, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_xchacha20poly1305_ietf_decrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_xchacha20poly1305_ietf_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_xchacha20poly1305_ietf_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_xchacha20poly1305_ietf_keygenСоздать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

PHP 7.2+ · sodium

sodium_crypto_aead_xchacha20poly1305_ietf_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства AEAD: шифрование и связанные данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_xchacha20poly1305_ietf_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_xchacha20poly1305_ietf_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_xchacha20poly1305_ietf_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_aead_xchacha20poly1305_ietf_encryptЗашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

PHP 7.2+ · sodium

sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string

Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_datastring. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_aead_xchacha20poly1305_ietf_encrypt(string $message, string $additional_data, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_aead_xchacha20poly1305_ietf_encrypt: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_aead_xchacha20poly1305_ietf_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES);
$orderId = 'order:742';
$plain = 'Сумма 1250 ₽';
$cipher = sodium_crypto_aead_xchacha20poly1305_ietf_encrypt($plain, $orderId, $nonce, $key);
$restored = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($cipher, $orderId, $nonce, $key);
$wrongOrder = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($cipher, 'order:743', $nonce, $key);

echo 'восстановлено: ', $restored, "\n";
echo 'подмена ID: ', $wrongOrder === false ? 'отклонена' : 'пропущена', "\n";
echo 'служебные данные открыты: ', $orderId, "\n";
Ожидаемый результат
восстановлено: Сумма 1250 ₽
подмена ID: отклонена
служебные данные открыты: order:742

Это модель записи заказа: nonce и order ID можно хранить рядом с шифротекстом, ключ — отдельно. Изменение AAD обнаруживается до выдачи текста.

Рядом в этом семействе: sodium_crypto_aead_aes256gcm_is_available, sodium_crypto_aead_aes256gcm_decrypt, sodium_crypto_aead_aes256gcm_encrypt, sodium_crypto_aead_aes256gcm_keygen, sodium_crypto_aead_aegis128l_decrypt.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_authСоздать или проверить MAC для сообщения с общим секретным ключом.

PHP 7.2+ · sodium

sodium_crypto_auth(string $message, string $key): string

Создать или проверить MAC для сообщения с общим секретным ключом.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_auth(string $message, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_auth: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_auth_keygen();
$message = 'webhook:order=742';
$mac = sodium_crypto_auth($message, $key);
echo 'MAC: ', strlen($mac), ' байт', "\n";
echo sodium_crypto_auth_verify($mac, $message, $key) ? "верно\n" : "ошибка\n";
echo sodium_crypto_auth_verify($mac, $message . '0', $key) ? "подмена пропущена\n" : "подмена отклонена\n";
Ожидаемый результат
MAC: 32 байт
верно
подмена отклонена

Отправитель и получатель знают один ключ. Этот пример подтверждает целостность webhook, но не скрывает его текст.

Рядом в этом семействе: sodium_crypto_auth_keygen, sodium_crypto_auth_verify.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_auth_keygenСоздать криптографически случайный ключ правильной длины для семейства MAC: подлинность сообщения.

PHP 7.2+ · sodium

sodium_crypto_auth_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства MAC: подлинность сообщения.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_auth_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_auth_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_auth_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_auth, sodium_crypto_auth_verify.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_auth_verifyПроверить криптографическое подтверждение, не раскрывая секретный ключ.

PHP 7.2+ · sodium

sodium_crypto_auth_verify(string $mac, string $message, string $key): bool

Проверить криптографическое подтверждение, не раскрывая секретный ключ.

ПараметрЧто именно передать
$macstring. Код подлинности, полученный для тех же сообщения и ключа.
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_auth_verify(string $mac, string $message, string $key): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_auth_verify: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_auth_keygen();
$message = 'webhook:order=742';
$mac = sodium_crypto_auth($message, $key);
echo 'MAC: ', strlen($mac), ' байт', "\n";
echo sodium_crypto_auth_verify($mac, $message, $key) ? "верно\n" : "ошибка\n";
echo sodium_crypto_auth_verify($mac, $message . '0', $key) ? "подмена пропущена\n" : "подмена отклонена\n";
Ожидаемый результат
MAC: 32 байт
верно
подмена отклонена

Отправитель и получатель знают один ключ. Этот пример подтверждает целостность webhook, но не скрывает его текст.

Рядом в этом семействе: sodium_crypto_auth, sodium_crypto_auth_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_boxЗащитить сообщение между участниками с помощью их открытых и секретных ключей.

PHP 7.2+ · sodium

sodium_crypto_box(string $message, string $nonce, string $key_pair): string

Защитить сообщение между участниками с помощью их открытых и секретных ключей.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box(string $message, string $nonce, string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$alice = sodium_crypto_box_keypair();
$bob = sodium_crypto_box_keypair();
$senderPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    sodium_crypto_box_secretkey($alice), sodium_crypto_box_publickey($bob)
);
$receiverPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    sodium_crypto_box_secretkey($bob), sodium_crypto_box_publickey($alice)
);
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$cipher = sodium_crypto_box('счёт №742', $nonce, $senderPair);
$plain = sodium_crypto_box_open($cipher, $nonce, $receiverPair);
echo 'Боб получил: ', $plain, "\n";
echo 'подмена: ', sodium_crypto_box_open($cipher . "x", $nonce, $receiverPair) === false ? 'отклонена' : 'пропущена', "\n";
Ожидаемый результат
Боб получил: счёт №742
подмена: отклонена

Пары для отправки и приёма собираются зеркально. Nonce отправляют рядом с ciphertext и не повторяют для того же направления ключей.

Рядом в этом семействе: sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open, sodium_crypto_box_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_box_keypair(): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_keypair(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_box_keypair();
echo 'пара: ', strlen($pair), ' байт', "\n";
echo 'открытый: ', strlen(sodium_crypto_box_publickey($pair)), "\n";
echo 'секретный: ', strlen(sodium_crypto_box_secretkey($pair)), "\n";
Ожидаемый результат
пара: 64 байт
открытый: 32
секретный: 32

Пара — бинарная упаковка двух частей. Публичную часть можно передать, секретную оставляют владельцу.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open, sodium_crypto_box_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_seed_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_box_seed_keypair(string $seed): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
$seedstring. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_seed_keypair(string $seed): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_seed_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$seed = str_repeat("\x01", SODIUM_CRYPTO_BOX_SEEDBYTES);
$first = sodium_crypto_box_seed_keypair($seed);
$second = sodium_crypto_box_seed_keypair($seed);
echo hash_equals($first, $second) ? "одинаковая пара\n" : "ошибка\n";
Ожидаемый результат
одинаковая пара

Одинаковый seed воспроизводит пару. В приложении seed должен иметь полную энтропию и защищаться как секретный ключ.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open, sodium_crypto_box_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_keypair_from_secretkey_and_publickeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_box_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_keypair_from_secretkey_and_publickey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_box_keypair();
$rebuilt = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    sodium_crypto_box_secretkey($pair),
    sodium_crypto_box_publickey($pair)
);
echo hash_equals($pair, $rebuilt) ? "пара собрана\n" : "ошибка\n";
Ожидаемый результат
пара собрана

Функция нужна на границе хранения, когда две части уже прочитаны из разных безопасных мест.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_open, sodium_crypto_box_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_openПроверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

PHP 7.2+ · sodium

sodium_crypto_box_open(string $ciphertext, string $nonce, string $key_pair): string|false

Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_open(string $ciphertext, string $nonce, string $key_pair): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_open: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$alice = sodium_crypto_box_keypair();
$bob = sodium_crypto_box_keypair();
$senderPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    sodium_crypto_box_secretkey($alice), sodium_crypto_box_publickey($bob)
);
$receiverPair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    sodium_crypto_box_secretkey($bob), sodium_crypto_box_publickey($alice)
);
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$cipher = sodium_crypto_box('счёт №742', $nonce, $senderPair);
$plain = sodium_crypto_box_open($cipher, $nonce, $receiverPair);
echo 'Боб получил: ', $plain, "\n";
echo 'подмена: ', sodium_crypto_box_open($cipher . "x", $nonce, $receiverPair) === false ? 'отклонена' : 'пропущена', "\n";
Ожидаемый результат
Боб получил: счёт №742
подмена: отклонена

Пары для отправки и приёма собираются зеркально. Nonce отправляют рядом с ciphertext и не повторяют для того же направления ключей.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_publickeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_box_publickey(string $key_pair): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_publickey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_publickey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_box_publickey(sodium_crypto_box_keypair());
echo 'открытый: ', strlen($part), ' байт', "\n";
Ожидаемый результат
открытый: 32 байт

Извлекается одна часть упаковки. Секретную часть не кодируют ради публикации.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_publickey_from_secretkeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_box_publickey_from_secretkey(string $secret_key): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_publickey_from_secretkey(string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_publickey_from_secretkey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_box_keypair();
$fromPair = sodium_crypto_box_publickey($pair);
$fromSecret = sodium_crypto_box_publickey_from_secretkey(sodium_crypto_box_secretkey($pair));
echo hash_equals($fromPair, $fromSecret) ? "ключ совпал\n" : "ошибка\n";
Ожидаемый результат
ключ совпал

Открытый ключ можно восстановить из секретного; обратное вычисление невозможно.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_sealЗащитить сообщение между участниками с помощью их открытых и секретных ключей.

PHP 7.2+ · sodium

sodium_crypto_box_seal(string $message, string $public_key): string

Защитить сообщение между участниками с помощью их открытых и секретных ключей.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_seal(string $message, string $public_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_seal: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$recipient = sodium_crypto_box_keypair();
$public = sodium_crypto_box_publickey($recipient);
$cipher = sodium_crypto_box_seal('результат анализа', $public);
$plain = sodium_crypto_box_seal_open($cipher, $recipient);
echo 'получатель прочитал: ', $plain, "\n";
echo 'накладные байты: ', strlen($cipher) - strlen('результат анализа'), "\n";
Ожидаемый результат
получатель прочитал: результат анализа
накладные байты: 48

Отправителю нужен только открытый ключ получателя. Sealed box не сообщает получателю, кто отправитель.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_seal_openПроверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

PHP 7.2+ · sodium

sodium_crypto_box_seal_open(string $ciphertext, string $key_pair): string|false

Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_seal_open(string $ciphertext, string $key_pair): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_seal_open: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$recipient = sodium_crypto_box_keypair();
$public = sodium_crypto_box_publickey($recipient);
$cipher = sodium_crypto_box_seal('результат анализа', $public);
$plain = sodium_crypto_box_seal_open($cipher, $recipient);
echo 'получатель прочитал: ', $plain, "\n";
echo 'накладные байты: ', strlen($cipher) - strlen('результат анализа'), "\n";
Ожидаемый результат
получатель прочитал: результат анализа
накладные байты: 48

Отправителю нужен только открытый ключ получателя. Sealed box не сообщает получателю, кто отправитель.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_box_secretkeyИзвлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

PHP 7.2+ · sodium

sodium_crypto_box_secretkey(string $key_pair): string

Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_box_secretkey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_box_secretkey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_box_secretkey(sodium_crypto_box_keypair());
echo 'секретный: ', strlen($part), ' байт', "\n";
Ожидаемый результат
секретный: 32 байт

Извлекается одна часть упаковки. Секретную часть не кодируют ради публикации.

Рядом в этом семействе: sodium_crypto_box, sodium_crypto_box_keypair, sodium_crypto_box_seed_keypair, sodium_crypto_box_keypair_from_secretkey_and_publickey, sodium_crypto_box_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_addНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_add(string $p, string $q): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$pstring. Закодированная точка допустимой группы.
$qstring. Вторая закодированная точка той же группы.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_add(string $p, string $q): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_add: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$p = sodium_crypto_core_ristretto255_random();
$q = sodium_crypto_core_ristretto255_random();
$sum = sodium_crypto_core_ristretto255_add($p, $q);
$restored = sodium_crypto_core_ristretto255_sub($sum, $q);
echo hash_equals($p, $restored) ? "точка восстановлена\n" : "ошибка\n";
Ожидаемый результат
точка восстановлена

Сложение и обратное вычитание показывают алгебраическое свойство. Это не схема шифрования.

Рядом в этом семействе: sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add, sodium_crypto_core_ristretto255_scalar_complement.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_from_hashНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_from_hash(string $s): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_from_hash(string $s): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_from_hash: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$wide = str_repeat("\x42", SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES);
$point = sodium_crypto_core_ristretto255_from_hash($wide);
echo sodium_crypto_core_ristretto255_is_valid_point($point) ? "допустимая точка\n" : "ошибка\n";
Ожидаемый результат
допустимая точка

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

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add, sodium_crypto_core_ristretto255_scalar_complement.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_is_valid_pointНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_is_valid_point(string $s): bool

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_is_valid_point(string $s): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_is_valid_point: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$point = sodium_crypto_core_ristretto255_random();
var_dump(sodium_crypto_core_ristretto255_is_valid_point($point));
var_dump(sodium_crypto_core_ristretto255_is_valid_point(str_repeat("\xff", strlen($point))));
Ожидаемый результат
bool(true)
bool(false)

Проверка должна предшествовать низкоуровневой операции над внешней точкой.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add, sodium_crypto_core_ristretto255_scalar_complement.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_randomНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_random(): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_random(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_random: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$point = sodium_crypto_core_ristretto255_random();
echo 'точка: ', strlen($point), ' байт; допустима: ', sodium_crypto_core_ristretto255_is_valid_point($point) ? 'да' : 'нет', "\n";
Ожидаемый результат
точка: 32 байт; допустима: да

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

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_scalar_add, sodium_crypto_core_ristretto255_scalar_complement.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_addНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_add(string $x, string $y): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$xstring. Первый скаляр фиксированной длины.
$ystring. Второй скаляр фиксированной длины.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_add(string $x, string $y): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_add: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$x = sodium_crypto_core_ristretto255_scalar_random();
$y = sodium_crypto_core_ristretto255_scalar_random();
$sum = sodium_crypto_core_ristretto255_scalar_add($x, $y);
$restored = sodium_crypto_core_ristretto255_scalar_sub($sum, $y);
echo hash_equals($x, $restored) ? "скаляр восстановлен\n" : "ошибка\n";
Ожидаемый результат
скаляр восстановлен

Пример показывает пару обратных операций, а не прикладной алгоритм.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_complement.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_complementНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_complement(string $s): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_complement(string $s): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_complement: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$scalar = sodium_crypto_core_ristretto255_scalar_random();
$twice = sodium_crypto_core_ristretto255_scalar_complement(
    sodium_crypto_core_ristretto255_scalar_complement($scalar)
);
echo hash_equals($scalar, $twice) ? "двойное дополнение вернуло скаляр\n" : "ошибка\n";
Ожидаемый результат
двойное дополнение вернуло скаляр

Свойство делает результат наблюдаемым, не выдавая случайный скаляр.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_invertНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_invert(string $s): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_invert(string $s): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_invert: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$scalar = sodium_crypto_core_ristretto255_scalar_random();
$twice = sodium_crypto_core_ristretto255_scalar_invert(
    sodium_crypto_core_ristretto255_scalar_invert($scalar)
);
echo hash_equals($scalar, $twice) ? "двойное обращение вернуло скаляр\n" : "ошибка\n";
Ожидаемый результат
двойное обращение вернуло скаляр

Обращение нулевого скаляра недопустимо; random даёт подходящий ненулевой вход.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_mulНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_mul(string $x, string $y): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$xstring. Первый скаляр фиксированной длины.
$ystring. Второй скаляр фиксированной длины.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_mul(string $x, string $y): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_mul: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$x = sodium_crypto_core_ristretto255_scalar_random();
$one = str_repeat("\0", SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES);
$one[0] = "\x01";
$product = sodium_crypto_core_ristretto255_scalar_mul($x, $one);
echo hash_equals($x, $product) ? "умножение на единицу сохранило скаляр\n" : "ошибка\n";
Ожидаемый результат
умножение на единицу сохранило скаляр

Байты one заданы в little-endian форме поля; это низкоуровневый тест свойства.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_negateНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_negate(string $s): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_negate(string $s): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_negate: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$x = sodium_crypto_core_ristretto255_scalar_random();
$zero = sodium_crypto_core_ristretto255_scalar_add($x, sodium_crypto_core_ristretto255_scalar_negate($x));
echo hash_equals($zero, str_repeat("\0", strlen($zero))) ? "x + (-x) = 0\n" : "ошибка\n";
Ожидаемый результат
x + (-x) = 0

Отрицание здесь относится к полю скаляров, не к целому числу PHP.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_randomНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_random(): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_random(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_random: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$scalar = sodium_crypto_core_ristretto255_scalar_random();
echo 'скаляр: ', strlen($scalar), ' байт', "\n";
Ожидаемый результат
скаляр: 32 байт

Функция возвращает допустимый ненулевой скаляр для протокола Ristretto255.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_reduceНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_reduce(string $s): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$sstring. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_reduce(string $s): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_reduce: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$wide = str_repeat("\x7f", SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES);
$scalar = sodium_crypto_core_ristretto255_scalar_reduce($wide);
echo 'сокращено: ', strlen($wide), ' → ', strlen($scalar), ' байт', "\n";
Ожидаемый результат
сокращено: 64 → 32 байт

Reduce интерпретирует широкий равномерный вход и приводит его по модулю порядка группы.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_scalar_subНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_scalar_sub(string $x, string $y): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$xstring. Первый скаляр фиксированной длины.
$ystring. Второй скаляр фиксированной длины.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_scalar_sub(string $x, string $y): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_scalar_sub: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$x = sodium_crypto_core_ristretto255_scalar_random();
$y = sodium_crypto_core_ristretto255_scalar_random();
$sum = sodium_crypto_core_ristretto255_scalar_add($x, $y);
$restored = sodium_crypto_core_ristretto255_scalar_sub($sum, $y);
echo hash_equals($x, $restored) ? "скаляр восстановлен\n" : "ошибка\n";
Ожидаемый результат
скаляр восстановлен

Пример показывает пару обратных операций, а не прикладной алгоритм.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_core_ristretto255_subНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_core_ristretto255_sub(string $p, string $q): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$pstring. Закодированная точка допустимой группы.
$qstring. Вторая закодированная точка той же группы.
Часть контрактаЧто получить
Сигнатураsodium_crypto_core_ristretto255_sub(string $p, string $q): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_core_ristretto255_sub: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$p = sodium_crypto_core_ristretto255_random();
$q = sodium_crypto_core_ristretto255_random();
$sum = sodium_crypto_core_ristretto255_add($p, $q);
$restored = sodium_crypto_core_ristretto255_sub($sum, $q);
echo hash_equals($p, $restored) ? "точка восстановлена\n" : "ошибка\n";
Ожидаемый результат
точка восстановлена

Сложение и обратное вычитание показывают алгебраическое свойство. Это не схема шифрования.

Рядом в этом семействе: sodium_crypto_core_ristretto255_add, sodium_crypto_core_ristretto255_from_hash, sodium_crypto_core_ristretto255_is_valid_point, sodium_crypto_core_ristretto255_random, sodium_crypto_core_ristretto255_scalar_add.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_kx_keypair(): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_keypair(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_kx_keypair();
echo 'пара KX: ', strlen($pair), ' байт', "\n";
Ожидаемый результат
пара KX: 64 байт

Пара предназначена для KX; формат другой криптосистемы нельзя подставлять только из-за одинаковой длины.

Рядом в этом семействе: sodium_crypto_kx_publickey, sodium_crypto_kx_secretkey, sodium_crypto_kx_seed_keypair, sodium_crypto_kx_client_session_keys, sodium_crypto_kx_server_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_publickeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_kx_publickey(string $key_pair): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_publickey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_publickey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_kx_publickey(sodium_crypto_kx_keypair());
echo 'открытый: ', strlen($part), ' байт', "\n";
Ожидаемый результат
открытый: 32 байт

Часть извлекают для обмена или защищённого хранения; пара остаётся типизированной назначением протокола.

Рядом в этом семействе: sodium_crypto_kx_keypair, sodium_crypto_kx_secretkey, sodium_crypto_kx_seed_keypair, sodium_crypto_kx_client_session_keys, sodium_crypto_kx_server_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_secretkeyИзвлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

PHP 7.2+ · sodium

sodium_crypto_kx_secretkey(string $key_pair): string

Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_secretkey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_secretkey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_kx_secretkey(sodium_crypto_kx_keypair());
echo 'секретный: ', strlen($part), ' байт', "\n";
Ожидаемый результат
секретный: 32 байт

Часть извлекают для обмена или защищённого хранения; пара остаётся типизированной назначением протокола.

Рядом в этом семействе: sodium_crypto_kx_keypair, sodium_crypto_kx_publickey, sodium_crypto_kx_seed_keypair, sodium_crypto_kx_client_session_keys, sodium_crypto_kx_server_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_seed_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_kx_seed_keypair(string $seed): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
$seedstring. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_seed_keypair(string $seed): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_seed_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$seed = str_repeat("\x02", SODIUM_CRYPTO_KX_SEEDBYTES);
$a = sodium_crypto_kx_seed_keypair($seed);
$b = sodium_crypto_kx_seed_keypair($seed);
echo hash_equals($a, $b) ? "пара воспроизводится\n" : "ошибка\n";
Ожидаемый результат
пара воспроизводится

Детерминированность полезна для восстановления из защищённого seed; короткая фраза seed не заменяет.

Рядом в этом семействе: sodium_crypto_kx_keypair, sodium_crypto_kx_publickey, sodium_crypto_kx_secretkey, sodium_crypto_kx_client_session_keys, sodium_crypto_kx_server_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_client_session_keysПолучить направленные ключи сессии клиента и сервера без передачи самих секретных ключей.

PHP 7.2+ · sodium

sodium_crypto_kx_client_session_keys(string $client_key_pair, string $server_key): array

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

ПараметрЧто именно передать
$client_key_pairstring. Пара ключей клиента KX: из неё используются и публичная, и секретная части.
$server_keystring. Публичный ключ сервера, полученный по доверенному каналу.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_client_session_keys(string $client_key_pair, string $server_key): array
Результатarray с позиционно определёнными бинарными значениями; распакуйте их сразу в переменные с понятными именами.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_client_session_keys: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$client = sodium_crypto_kx_keypair();
$server = sodium_crypto_kx_keypair();
[$clientRx, $clientTx] = sodium_crypto_kx_client_session_keys(
    $client, sodium_crypto_kx_publickey($server)
);
[$serverRx, $serverTx] = sodium_crypto_kx_server_session_keys(
    $server, sodium_crypto_kx_publickey($client)
);
echo hash_equals($clientTx, $serverRx) ? "client TX = server RX\n" : "ошибка\n";
echo hash_equals($serverTx, $clientRx) ? "server TX = client RX\n" : "ошибка\n";
echo hash_equals($clientTx, $clientRx) ? "направления совпали\n" : "направления разделены\n";
Ожидаемый результат
client TX = server RX
server TX = client RX
направления разделены

KX сразу разделяет ключи направлений. Их затем передают AEAD/secretstream, а не используют как выводимый токен.

Рядом в этом семействе: sodium_crypto_kx_keypair, sodium_crypto_kx_publickey, sodium_crypto_kx_secretkey, sodium_crypto_kx_seed_keypair, sodium_crypto_kx_server_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kx_server_session_keysПолучить направленные ключи сессии клиента и сервера без передачи самих секретных ключей.

PHP 7.2+ · sodium

sodium_crypto_kx_server_session_keys(string $server_key_pair, string $client_key): array

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

ПараметрЧто именно передать
$server_key_pairstring. Пара ключей сервера KX.
$client_keystring. Публичный ключ клиента.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kx_server_session_keys(string $server_key_pair, string $client_key): array
Результатarray с позиционно определёнными бинарными значениями; распакуйте их сразу в переменные с понятными именами.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kx_server_session_keys: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$client = sodium_crypto_kx_keypair();
$server = sodium_crypto_kx_keypair();
[$clientRx, $clientTx] = sodium_crypto_kx_client_session_keys(
    $client, sodium_crypto_kx_publickey($server)
);
[$serverRx, $serverTx] = sodium_crypto_kx_server_session_keys(
    $server, sodium_crypto_kx_publickey($client)
);
echo hash_equals($clientTx, $serverRx) ? "client TX = server RX\n" : "ошибка\n";
echo hash_equals($serverTx, $clientRx) ? "server TX = client RX\n" : "ошибка\n";
echo hash_equals($clientTx, $clientRx) ? "направления совпали\n" : "направления разделены\n";
Ожидаемый результат
client TX = server RX
server TX = client RX
направления разделены

KX сразу разделяет ключи направлений. Их затем передают AEAD/secretstream, а не используют как выводимый токен.

Рядом в этом семействе: sodium_crypto_kx_keypair, sodium_crypto_kx_publickey, sodium_crypto_kx_secretkey, sodium_crypto_kx_seed_keypair, sodium_crypto_kx_client_session_keys.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_generichashВычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

PHP 7.2+ · sodium

sodium_crypto_generichash(string $message, string $key = '', int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string

Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$key
по умолчанию: пустая строка
string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
$length
по умолчанию: SODIUM_CRYPTO_GENERICHASH_BYTES
int. Требуемое число байтов результата в допустимых для функции границах.
Часть контрактаЧто получить
Сигнатураsodium_crypto_generichash(string $message, string $key = '', int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_generichash: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$digest = sodium_crypto_generichash('invoice=742');
echo sodium_bin2hex($digest), "\n";
echo 'байт: ', strlen($digest), "\n";
Ожидаемый результат
6ae8454ac0f3a7a58cec11b911cd0921d2c753dba5a1c28fb3a8e97afd34e047
байт: 32

Один и тот же набор байтов даёт один digest. Он помогает сверять данные, но без ключа не доказывает отправителя.

Рядом в этом семействе: sodium_crypto_generichash_keygen, sodium_crypto_generichash_init, sodium_crypto_generichash_update, sodium_crypto_generichash_final.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_generichash_keygenСоздать криптографически случайный ключ правильной длины для семейства Универсальный хеш и потоковый хеш.

PHP 7.2+ · sodium

sodium_crypto_generichash_keygen(): string

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

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_generichash_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_generichash_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_generichash_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_generichash, sodium_crypto_generichash_init, sodium_crypto_generichash_update, sodium_crypto_generichash_final.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_generichash_initВычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

PHP 7.2+ · sodium

sodium_crypto_generichash_init(string $key = '', int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string

Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

ПараметрЧто именно передать
$key
по умолчанию: пустая строка
string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
$length
по умолчанию: SODIUM_CRYPTO_GENERICHASH_BYTES
int. Требуемое число байтов результата в допустимых для функции границах.
Часть контрактаЧто получить
Сигнатураsodium_crypto_generichash_init(string $key = '', int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_generichash_init: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$state = sodium_crypto_generichash_init('', 32);
$updated = sodium_crypto_generichash_update($state, 'invoice=');
sodium_crypto_generichash_update($state, '742');
$chunked = sodium_crypto_generichash_final($state, 32);
$oneShot = sodium_crypto_generichash('invoice=742', '', 32);
echo $updated ? "состояние обновлено\n" : "ошибка\n";
echo hash_equals($oneShot, $chunked) ? "части = целое\n" : "не совпало\n";
Ожидаемый результат
состояние обновлено
части = целое

Потоковая форма нужна для файла или HTTP-тела, которое нельзя разумно держать целиком в памяти.

Рядом в этом семействе: sodium_crypto_generichash, sodium_crypto_generichash_keygen, sodium_crypto_generichash_update, sodium_crypto_generichash_final.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_generichash_updateВычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

PHP 7.2+ · sodium

sodium_crypto_generichash_update(string &$state, string $message): true

Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

ПараметрЧто именно передать
&$statestring. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную.
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
Часть контрактаЧто получить
Сигнатураsodium_crypto_generichash_update(string &$state, string $message): true
Результатtrue после успешного обновления состояния; само состояние меняется по ссылке.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_generichash_update: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$state = sodium_crypto_generichash_init('', 32);
$updated = sodium_crypto_generichash_update($state, 'invoice=');
sodium_crypto_generichash_update($state, '742');
$chunked = sodium_crypto_generichash_final($state, 32);
$oneShot = sodium_crypto_generichash('invoice=742', '', 32);
echo $updated ? "состояние обновлено\n" : "ошибка\n";
echo hash_equals($oneShot, $chunked) ? "части = целое\n" : "не совпало\n";
Ожидаемый результат
состояние обновлено
части = целое

Потоковая форма нужна для файла или HTTP-тела, которое нельзя разумно держать целиком в памяти.

Рядом в этом семействе: sodium_crypto_generichash, sodium_crypto_generichash_keygen, sodium_crypto_generichash_init, sodium_crypto_generichash_final.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_generichash_finalВычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

PHP 7.2+ · sodium

sodium_crypto_generichash_final(string &$state, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string

Вычислить BLAKE2b-хеш целиком или по частям; необязательный ключ превращает его в keyed hash.

ПараметрЧто именно передать
&$statestring. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную.
$length
по умолчанию: SODIUM_CRYPTO_GENERICHASH_BYTES
int. Требуемое число байтов результата в допустимых для функции границах.
Часть контрактаЧто получить
Сигнатураsodium_crypto_generichash_final(string &$state, int $length = SODIUM_CRYPTO_GENERICHASH_BYTES): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_generichash_final: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$state = sodium_crypto_generichash_init('', 32);
$updated = sodium_crypto_generichash_update($state, 'invoice=');
sodium_crypto_generichash_update($state, '742');
$chunked = sodium_crypto_generichash_final($state, 32);
$oneShot = sodium_crypto_generichash('invoice=742', '', 32);
echo $updated ? "состояние обновлено\n" : "ошибка\n";
echo hash_equals($oneShot, $chunked) ? "части = целое\n" : "не совпало\n";
Ожидаемый результат
состояние обновлено
части = целое

Потоковая форма нужна для файла или HTTP-тела, которое нельзя разумно держать целиком в памяти.

Рядом в этом семействе: sodium_crypto_generichash, sodium_crypto_generichash_keygen, sodium_crypto_generichash_init, sodium_crypto_generichash_update.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kdf_derive_from_keyПолучить отдельный ключ назначения из master key, контекста и числового ID.

PHP 7.2+ · sodium

sodium_crypto_kdf_derive_from_key(int $subkey_length, int $subkey_id, string $context, string $key): string

Получить отдельный ключ назначения из master key, контекста и числового ID.

ПараметрЧто именно передать
$subkey_lengthint. Длина производного ключа в байтах.
$subkey_idint. Числовой ID назначения ключа. Один master key с разными ID даёт разные независимые подключи.
$contextstring. Ровно 8 ASCII-байтов пространства имён приложения, например ORDERS01.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kdf_derive_from_key(int $subkey_length, int $subkey_id, string $context, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kdf_derive_from_key: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$master = sodium_crypto_kdf_keygen();
$orders = sodium_crypto_kdf_derive_from_key(32, 1, 'ORDERS01', $master);
$uploads = sodium_crypto_kdf_derive_from_key(32, 1, 'UPLOAD01', $master);
$ordersV2 = sodium_crypto_kdf_derive_from_key(32, 2, 'ORDERS01', $master);
echo 'длина: ', strlen($orders), "\n";
echo hash_equals($orders, $uploads) ? "контексты совпали\n" : "контексты разделены\n";
echo hash_equals($orders, $ordersV2) ? "ID совпали\n" : "ID разделены\n";
Ожидаемый результат
длина: 32
контексты разделены
ID разделены

Один master key обслуживает несколько подсистем без хранения десятков независимых корневых ключей.

Рядом в этом семействе: sodium_crypto_kdf_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_kdf_keygenСоздать криптографически случайный ключ правильной длины для семейства Производные ключи одного приложения.

PHP 7.2+ · sodium

sodium_crypto_kdf_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Производные ключи одного приложения.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_kdf_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_kdf_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_kdf_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_kdf_derive_from_key.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhashБезопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash(int $length, string $password, string $salt, int $opslimit, int $memlimit, int $algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT): string

Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

ПараметрЧто именно передать
$lengthint. Требуемое число байтов результата в допустимых для функции границах.
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
$saltstring. Случайная соль точной длины. Её сохраняют вместе с параметрами; она не является секретом.
$opslimitint. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине.
$memlimitint. Лимит памяти в байтах. Его согласуют с opslimit и возможностями production-среды.
$algo
по умолчанию: SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
int. Идентификатор допустимого алгоритма password hashing/KDF.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash(int $length, string $password, string $salt, int $opslimit, int $memlimit, int $algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULT): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$salt = str_repeat("\x03", SODIUM_CRYPTO_PWHASH_SALTBYTES);
$key = sodium_crypto_pwhash(32, 'correct horse', $salt, SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13);
echo 'производный ключ: ', strlen($key), ' байт', "\n";
$other = sodium_crypto_pwhash(32, 'correct horse', str_repeat("\x04", SODIUM_CRYPTO_PWHASH_SALTBYTES), SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13);
echo hash_equals($key, $other) ? "соли не повлияли\n" : "другая соль → другой ключ\n";
Ожидаемый результат
производный ключ: 32 байт
другая соль → другой ключ

Низкоуровневый результат — бинарный ключ. Чтобы повторить его, надо хранить соль, алгоритм и оба лимита отдельно.

Рядом в этом семействе: sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256, sodium_crypto_pwhash_scryptsalsa208sha256_str.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_strБезопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_str(string $password, int $opslimit, int $memlimit): string

Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

ПараметрЧто именно передать
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
$opslimitint. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине.
$memlimitint. Лимит памяти в байтах. Его согласуют с opslimit и возможностями production-среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_str(string $password, int $opslimit, int $memlimit): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_str: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$hash = sodium_crypto_pwhash_str('correct horse', SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);
echo 'строка хранит параметры: ', str_starts_with($hash, '$') ? 'да' : 'нет', "\n";
echo 'проверка: ', sodium_crypto_pwhash_str_verify($hash, 'correct horse') ? 'успешна' : 'ошибка', "\n";
Ожидаемый результат
строка хранит параметры: да
проверка: успешна

Строка предназначена для хранения в одном поле: соль и параметры уже включены. Сам пароль не сохраняется.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256, sodium_crypto_pwhash_scryptsalsa208sha256_str.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_str_verifyПроверить криптографическое подтверждение, не раскрывая секретный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_str_verify(string $hash, string $password): bool

Проверить криптографическое подтверждение, не раскрывая секретный ключ.

ПараметрЧто именно передать
$hashstring. Сохранённая строка хеша с параметрами, а не исходный пароль.
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_str_verify(string $hash, string $password): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_str_verify: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$hash = sodium_crypto_pwhash_str('correct horse', SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);
var_dump(sodium_crypto_pwhash_str_verify($hash, 'correct horse'));
var_dump(sodium_crypto_pwhash_str_verify($hash, 'wrong horse'));
Ожидаемый результат
bool(true)
bool(false)

В базе хранится строка hash с параметрами, а при входе проверяется введённый пароль. Сравнивать строки вручную не нужно.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256, sodium_crypto_pwhash_scryptsalsa208sha256_str.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_str_needs_rehashБезопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_str_needs_rehash(string $password, int $opslimit, int $memlimit): bool

Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

ПараметрЧто именно передать
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
$opslimitint. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине.
$memlimitint. Лимит памяти в байтах. Его согласуют с opslimit и возможностями production-среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_str_needs_rehash(string $password, int $opslimit, int $memlimit): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_str_needs_rehash: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$hash = sodium_crypto_pwhash_str(
    'correct horse',
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
var_dump(sodium_crypto_pwhash_str_needs_rehash(
    $hash,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
));
var_dump(sodium_crypto_pwhash_str_needs_rehash(
    $hash,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
));
Ожидаемый результат
bool(false)
bool(true)

После успешного входа true означает: создать новый hash с актуальными лимитами и заменить старый.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_scryptsalsa208sha256, sodium_crypto_pwhash_scryptsalsa208sha256_str.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_scryptsalsa208sha256Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_scryptsalsa208sha256(int $length, string $password, string $salt, int $opslimit, int $memlimit): string

Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

ПараметрЧто именно передать
$lengthint. Требуемое число байтов результата в допустимых для функции границах.
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
$saltstring. Случайная соль точной длины. Её сохраняют вместе с параметрами; она не является секретом.
$opslimitint. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине.
$memlimitint. Лимит памяти в байтах. Его согласуют с opslimit и возможностями production-среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_scryptsalsa208sha256(int $length, string $password, string $salt, int $opslimit, int $memlimit): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_scryptsalsa208sha256: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$salt = str_repeat("\x03", SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES);
$key = sodium_crypto_pwhash_scryptsalsa208sha256(32, 'correct horse', $salt, SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
echo 'производный ключ: ', strlen($key), ' байт', "\n";
$other = sodium_crypto_pwhash_scryptsalsa208sha256(32, 'correct horse', str_repeat("\x04", SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES), SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
echo hash_equals($key, $other) ? "соли не повлияли\n" : "другая соль → другой ключ\n";
Ожидаемый результат
производный ключ: 32 байт
другая соль → другой ключ

Низкоуровневый результат — бинарный ключ. Чтобы повторить его, надо хранить соль, алгоритм и оба лимита отдельно.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256_str.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_scryptsalsa208sha256_strБезопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_scryptsalsa208sha256_str(string $password, int $opslimit, int $memlimit): string

Безопасно обработать пароль с ограничением CPU и памяти; конкретная функция либо хранит verifier, либо выводит бинарный ключ.

ПараметрЧто именно передать
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
$opslimitint. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине.
$memlimitint. Лимит памяти в байтах. Его согласуют с opslimit и возможностями production-среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_scryptsalsa208sha256_str(string $password, int $opslimit, int $memlimit): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_scryptsalsa208sha256_str: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$hash = sodium_crypto_pwhash_scryptsalsa208sha256_str('correct horse', SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
echo 'строка хранит параметры: ', str_starts_with($hash, '$') ? 'да' : 'нет', "\n";
echo 'проверка: ', sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($hash, 'correct horse') ? 'успешна' : 'ошибка', "\n";
Ожидаемый результат
строка хранит параметры: да
проверка: успешна

Строка предназначена для хранения в одном поле: соль и параметры уже включены. Сам пароль не сохраняется.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_pwhash_scryptsalsa208sha256_str_verifyПроверить криптографическое подтверждение, не раскрывая секретный ключ.

PHP 7.2+ · sodium

sodium_crypto_pwhash_scryptsalsa208sha256_str_verify(string $hash, string $password): bool

Проверить криптографическое подтверждение, не раскрывая секретный ключ.

ПараметрЧто именно передать
$hashstring. Сохранённая строка хеша с параметрами, а не исходный пароль.
$passwordstring. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным.
Часть контрактаЧто получить
Сигнатураsodium_crypto_pwhash_scryptsalsa208sha256_str_verify(string $hash, string $password): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_pwhash_scryptsalsa208sha256_str_verify: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$hash = sodium_crypto_pwhash_scryptsalsa208sha256_str('correct horse', SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
var_dump(sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($hash, 'correct horse'));
var_dump(sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($hash, 'wrong horse'));
Ожидаемый результат
bool(true)
bool(false)

В базе хранится строка hash с параметрами, а при входе проверяется введённый пароль. Сравнивать строки вручную не нужно.

Рядом в этом семействе: sodium_crypto_pwhash, sodium_crypto_pwhash_str, sodium_crypto_pwhash_str_verify, sodium_crypto_pwhash_str_needs_rehash, sodium_crypto_pwhash_scryptsalsa208sha256.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_scalarmultНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 7.2+ · sodium

sodium_crypto_scalarmult(string $n, string $p): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$nstring. Секретный скаляр фиксированной длины.
$pstring. Закодированная точка допустимой группы.
Часть контрактаЧто получить
Сигнатураsodium_crypto_scalarmult(string $n, string $p): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_scalarmult: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$aliceSecret = random_bytes(SODIUM_CRYPTO_SCALARMULT_SCALARBYTES);
$bobSecret = random_bytes(SODIUM_CRYPTO_SCALARMULT_SCALARBYTES);
$alicePublic = sodium_crypto_scalarmult_base($aliceSecret);
$bobPublic = sodium_crypto_scalarmult_base($bobSecret);
$aliceShared = sodium_crypto_scalarmult($aliceSecret, $bobPublic);
$bobShared = sodium_crypto_scalarmult($bobSecret, $alicePublic);
echo hash_equals($aliceShared, $bobShared) ? "общая тайна совпала\n" : "ошибка\n";
Ожидаемый результат
общая тайна совпала

Совпадение демонстрирует X25519. Реальный протокол ещё должен подтвердить стороны и вывести ключи нужных назначений.

Рядом в этом семействе: sodium_crypto_scalarmult_ristretto255, sodium_crypto_scalarmult_ristretto255_base, sodium_crypto_scalarmult_base.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_scalarmult_ristretto255Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_scalarmult_ristretto255(string $n, string $p): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$nstring. Секретный скаляр фиксированной длины.
$pstring. Закодированная точка допустимой группы.
Часть контрактаЧто получить
Сигнатураsodium_crypto_scalarmult_ristretto255(string $n, string $p): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_scalarmult_ristretto255: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$a = sodium_crypto_core_ristretto255_scalar_random();
$b = sodium_crypto_core_ristretto255_scalar_random();
$aPublic = sodium_crypto_scalarmult_ristretto255_base($a);
$bPublic = sodium_crypto_scalarmult_ristretto255_base($b);
$ab = sodium_crypto_scalarmult_ristretto255($a, $bPublic);
$ba = sodium_crypto_scalarmult_ristretto255($b, $aPublic);
echo hash_equals($ab, $ba) ? "результаты совпали\n" : "ошибка\n";
Ожидаемый результат
результаты совпали

Свойство показано на допустимых случайных скалярах и точках; схему аутентификации оно само не задаёт.

Рядом в этом семействе: sodium_crypto_scalarmult, sodium_crypto_scalarmult_ristretto255_base, sodium_crypto_scalarmult_base.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_scalarmult_ristretto255_baseНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 8.1+; требуется libsodium 1.0.18+ · sodium

sodium_crypto_scalarmult_ristretto255_base(string $n): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$nstring. Секретный скаляр фиксированной длины.
Часть контрактаЧто получить
Сигнатураsodium_crypto_scalarmult_ristretto255_base(string $n): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 8.1+; требуется libsodium 1.0.18+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_scalarmult_ristretto255_base: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$scalar = sodium_crypto_core_ristretto255_scalar_random();
$point = sodium_crypto_scalarmult_ristretto255_base($scalar);
echo sodium_crypto_core_ristretto255_is_valid_point($point) ? "получена допустимая точка\n" : "ошибка\n";
Ожидаемый результат
получена допустимая точка

Base умножает стандартную базовую точку; результат остаётся строительным блоком протокола.

Рядом в этом семействе: sodium_crypto_scalarmult, sodium_crypto_scalarmult_ristretto255, sodium_crypto_scalarmult_base.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretboxОперация Sodium: crypto secretbox.

PHP 7.2+ · sodium

sodium_crypto_secretbox(string $message, string $nonce, string $key): string

Операция Sodium: crypto secretbox.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretbox(string $message, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretbox: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$cipher = sodium_crypto_secretbox('api-token-demo', $nonce, $key);
$stored = sodium_bin2base64($nonce . $cipher, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
$raw = sodium_base642bin($stored, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
$restored = sodium_crypto_secretbox_open(
    substr($raw, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES),
    substr($raw, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES),
    $key
);
echo 'из хранилища: ', $restored, "\n";
$raw[strlen($raw) - 1] = chr(ord($raw[strlen($raw) - 1]) ^ 1);
echo sodium_crypto_secretbox_open(substr($raw, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES), substr($raw, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES), $key) === false
    ? "подмена отклонена\n" : "подмена пропущена\n";
Ожидаемый результат
из хранилища: api-token-demo
подмена отклонена

Практическая упаковка хранит nonce и ciphertext в Base64; ключ остаётся в секретном хранилище и не входит в запись.

Рядом в этом семействе: sodium_crypto_secretbox_keygen, sodium_crypto_secretbox_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretbox_keygenСоздать криптографически случайный ключ правильной длины для семейства Secretbox: общий секретный ключ.

PHP 7.2+ · sodium

sodium_crypto_secretbox_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Secretbox: общий секретный ключ.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretbox_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretbox_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretbox_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_secretbox, sodium_crypto_secretbox_open.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretbox_openПроверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

PHP 7.2+ · sodium

sodium_crypto_secretbox_open(string $ciphertext, string $nonce, string $key): string|false

Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

ПараметрЧто именно передать
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretbox_open(string $ciphertext, string $nonce, string $key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretbox_open: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$cipher = sodium_crypto_secretbox('api-token-demo', $nonce, $key);
$stored = sodium_bin2base64($nonce . $cipher, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
$raw = sodium_base642bin($stored, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
$restored = sodium_crypto_secretbox_open(
    substr($raw, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES),
    substr($raw, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES),
    $key
);
echo 'из хранилища: ', $restored, "\n";
$raw[strlen($raw) - 1] = chr(ord($raw[strlen($raw) - 1]) ^ 1);
echo sodium_crypto_secretbox_open(substr($raw, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES), substr($raw, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES), $key) === false
    ? "подмена отклонена\n" : "подмена пропущена\n";
Ожидаемый результат
из хранилища: api-token-demo
подмена отклонена

Практическая упаковка хранит nonce и ciphertext в Base64; ключ остаётся в секретном хранилище и не входит в запись.

Рядом в этом семействе: sodium_crypto_secretbox, sodium_crypto_secretbox_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_keygenСоздать криптографически случайный ключ правильной длины для семейства Secretstream: большие и потоковые данные.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Secretstream: большие и потоковые данные.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_init_push, sodium_crypto_secretstream_xchacha20poly1305_push, sodium_crypto_secretstream_xchacha20poly1305_init_pull, sodium_crypto_secretstream_xchacha20poly1305_pull, sodium_crypto_secretstream_xchacha20poly1305_rekey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_init_pushВыполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_init_push(string $key): array

Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

ПараметрЧто именно передать
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_init_push(string $key): array
Результатarray с позиционно определёнными бинарными значениями; распакуйте их сразу в переменные с понятными именами.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_init_push: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
[$state, $header] = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
echo 'заголовок: ', strlen($header), ' байт', "\n";
echo 'состояние создано: ', $state !== '' ? 'да' : 'нет', "\n";
Ожидаемый результат
заголовок: 24 байт
состояние создано: да

Header передают получателю перед первым блоком. State не сериализуют как долговременный ключ.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_keygen, sodium_crypto_secretstream_xchacha20poly1305_push, sodium_crypto_secretstream_xchacha20poly1305_init_pull, sodium_crypto_secretstream_xchacha20poly1305_pull, sodium_crypto_secretstream_xchacha20poly1305_rekey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_pushВыполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_push(string &$state, string $message, string $additional_data = '', int $tag = SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE): string

Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

ПараметрЧто именно передать
&$statestring. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную.
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$additional_data
по умолчанию: пустая строка
string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
$tag
по умолчанию: SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE
int. Тег типа блока secretstream: обычный, push, rekey или final.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_push(string &$state, string $message, string $additional_data = '', int $tag = SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_push: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
[$push, $header] = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
$chunks = [
    sodium_crypto_secretstream_xchacha20poly1305_push($push, 'строка 1', '', SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE),
    sodium_crypto_secretstream_xchacha20poly1305_push($push, 'строка 2', '', SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL),
];
$pull = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
foreach ($chunks as $cipher) {
    $result = sodium_crypto_secretstream_xchacha20poly1305_pull($pull, $cipher);
    if ($result === false) { throw new RuntimeException('Повреждённый блок'); }
    [$plain, $tag] = $result;
    echo $plain, ' | ', $tag === SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL ? 'FINAL' : 'MESSAGE', "\n";
}
Ожидаемый результат
строка 1 | MESSAGE
строка 2 | FINAL

Получатель проверяет каждый блок и видит финальную границу. Архив без FINAL следует считать оборванным.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_keygen, sodium_crypto_secretstream_xchacha20poly1305_init_push, sodium_crypto_secretstream_xchacha20poly1305_init_pull, sodium_crypto_secretstream_xchacha20poly1305_pull, sodium_crypto_secretstream_xchacha20poly1305_rekey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_init_pullВыполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_init_pull(string $header, string $key): string

Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

ПараметрЧто именно передать
$headerstring. Публичный заголовок secretstream из init_push; он нужен получателю до первого блока.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_init_pull(string $header, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_init_pull: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
[$push, $header] = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
$pull = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
echo 'приём готов: ', $pull !== '' ? 'да' : 'нет', "\n";
Ожидаемый результат
приём готов: да

Получатель использует тот же secret key и публичный header, чтобы создать независимое состояние чтения.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_keygen, sodium_crypto_secretstream_xchacha20poly1305_init_push, sodium_crypto_secretstream_xchacha20poly1305_push, sodium_crypto_secretstream_xchacha20poly1305_pull, sodium_crypto_secretstream_xchacha20poly1305_rekey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_pullВыполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_pull(string &$state, string $ciphertext, string $additional_data = ''): array|false

Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

ПараметрЧто именно передать
&$statestring. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную.
$ciphertextstring. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст.
$additional_data
по умолчанию: пустая строка
string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_pull(string &$state, string $ciphertext, string $additional_data = ''): array|false
Результатarray|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_pull: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
[$push, $header] = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
$chunks = [
    sodium_crypto_secretstream_xchacha20poly1305_push($push, 'строка 1', '', SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE),
    sodium_crypto_secretstream_xchacha20poly1305_push($push, 'строка 2', '', SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL),
];
$pull = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
foreach ($chunks as $cipher) {
    $result = sodium_crypto_secretstream_xchacha20poly1305_pull($pull, $cipher);
    if ($result === false) { throw new RuntimeException('Повреждённый блок'); }
    [$plain, $tag] = $result;
    echo $plain, ' | ', $tag === SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL ? 'FINAL' : 'MESSAGE', "\n";
}
Ожидаемый результат
строка 1 | MESSAGE
строка 2 | FINAL

Получатель проверяет каждый блок и видит финальную границу. Архив без FINAL следует считать оборванным.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_keygen, sodium_crypto_secretstream_xchacha20poly1305_init_push, sodium_crypto_secretstream_xchacha20poly1305_push, sodium_crypto_secretstream_xchacha20poly1305_init_pull, sodium_crypto_secretstream_xchacha20poly1305_rekey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_secretstream_xchacha20poly1305_rekeyВыполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

PHP 7.2+ · sodium

sodium_crypto_secretstream_xchacha20poly1305_rekey(string &$state): void

Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.

ПараметрЧто именно передать
&$statestring. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную.
Часть контрактаЧто получить
Сигнатураsodium_crypto_secretstream_xchacha20poly1305_rekey(string &$state): void
Результатvoid: отдельного значения нет; аргумент с & изменяется на месте.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_secretstream_xchacha20poly1305_rekey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_secretstream_xchacha20poly1305_keygen();
[$push, $header] = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
$pull = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
sodium_crypto_secretstream_xchacha20poly1305_rekey($push);
sodium_crypto_secretstream_xchacha20poly1305_rekey($pull);
$cipher = sodium_crypto_secretstream_xchacha20poly1305_push($push, 'после смены');
[$plain] = sodium_crypto_secretstream_xchacha20poly1305_pull($pull, $cipher);
echo $plain, "\n";
Ожидаемый результат
после смены

Обе стороны меняют состояние в одной логической позиции. Односторонний rekey рассинхронизирует поток.

Рядом в этом семействе: sodium_crypto_secretstream_xchacha20poly1305_keygen, sodium_crypto_secretstream_xchacha20poly1305_init_push, sodium_crypto_secretstream_xchacha20poly1305_push, sodium_crypto_secretstream_xchacha20poly1305_init_pull, sodium_crypto_secretstream_xchacha20poly1305_pull.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_shorthashПолучить короткий keyed-хеш для внутренней хеш-таблицы; это не подпись и не хеш пароля.

PHP 7.2+ · sodium

sodium_crypto_shorthash(string $message, string $key): string

Получить короткий keyed-хеш для внутренней хеш-таблицы; это не подпись и не хеш пароля.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_shorthash(string $message, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_shorthash: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_shorthash_keygen();
$bucket = sodium_crypto_shorthash('attacker-controlled-key', $key);
echo 'короткий хеш: ', strlen($bucket), ' байт', "\n";
Ожидаемый результат
короткий хеш: 8 байт

Случайный ключ делает сам hex непредсказуемым, поэтому в проверяемой версии вывод заменяется стабильным фактом длины; значение не сохраняют как подпись.

Рядом в этом семействе: sodium_crypto_shorthash_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_shorthash_keygenСоздать криптографически случайный ключ правильной длины для семейства Короткий keyed-хеш для внутренних таблиц.

PHP 7.2+ · sodium

sodium_crypto_shorthash_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Короткий keyed-хеш для внутренних таблиц.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_shorthash_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_shorthash_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_shorthash_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 16 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_shorthash.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_signСоздать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

PHP 7.2+ · sodium

sodium_crypto_sign(string $message, string $secret_key): string

Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign(string $message, string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$signed = sodium_crypto_sign('release-1.4.zip', sodium_crypto_sign_secretkey($pair));
$plain = sodium_crypto_sign_open($signed, sodium_crypto_sign_publickey($pair));
echo 'проверено: ', $plain, "\n";
$signed[0] = chr(ord($signed[0]) ^ 1);
echo sodium_crypto_sign_open($signed, sodium_crypto_sign_publickey($pair)) === false ? "подмена отклонена\n" : "подмена пропущена\n";
Ожидаемый результат
проверено: release-1.4.zip
подмена отклонена

Attached-форма возвращает подпись вместе с сообщением; open выдаёт сообщение только после проверки.

Рядом в этом семействе: sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair, sodium_crypto_sign_keypair_from_secretkey_and_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_detachedСоздать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

PHP 7.2+ · sodium

sodium_crypto_sign_detached(string $message, string $secret_key): string

Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_detached(string $message, string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_detached: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$secret = sodium_crypto_sign_secretkey($pair);
$public = sodium_crypto_sign_publickey($pair);
$manifest = 'release=1.4;sha256=demo';
$signature = sodium_crypto_sign_detached($manifest, $secret);
echo sodium_crypto_sign_verify_detached($signature, $manifest, $public) ? "подпись верна\n" : "ошибка\n";
echo sodium_crypto_sign_verify_detached($signature, $manifest . 'x', $public) ? "подмена пропущена\n" : "подмена отклонена\n";
Ожидаемый результат
подпись верна
подмена отклонена

Detached-подпись удобно хранить рядом с manifest. Открытый ключ должен быть заранее доверенным.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair, sodium_crypto_sign_keypair_from_secretkey_and_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_ed25519_pk_to_curve25519Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

PHP 7.2+ · sodium

sodium_crypto_sign_ed25519_pk_to_curve25519(string $public_key): string

Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

ПараметрЧто именно передать
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_ed25519_pk_to_curve25519(string $public_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_ed25519_pk_to_curve25519: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$converted = sodium_crypto_sign_ed25519_pk_to_curve25519(sodium_crypto_sign_publickey($pair));
echo 'публичный Curve25519: ', strlen($converted), ' байт', "\n";
Ожидаемый результат
публичный Curve25519: 32 байт

Преобразование нужно только протоколу, который явно связывает ключи Ed25519 и Curve25519; одинаковая личность ключа требует отдельной модели доверия.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair, sodium_crypto_sign_keypair_from_secretkey_and_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_ed25519_sk_to_curve25519Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

PHP 7.2+ · sodium

sodium_crypto_sign_ed25519_sk_to_curve25519(string $secret_key): string

Создать либо обработать цифровую подпись Ed25519 для подтверждения автора и целостности сообщения.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_ed25519_sk_to_curve25519(string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_ed25519_sk_to_curve25519: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$converted = sodium_crypto_sign_ed25519_sk_to_curve25519(sodium_crypto_sign_secretkey($pair));
echo 'секретный Curve25519: ', strlen($converted), ' байт', "\n";
Ожидаемый результат
секретный Curve25519: 32 байт

Преобразование нужно только протоколу, который явно связывает ключи Ed25519 и Curve25519; одинаковая личность ключа требует отдельной модели доверия.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_keypair, sodium_crypto_sign_keypair_from_secretkey_and_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_sign_keypair(): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_keypair(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
echo 'пара подписи: ', strlen($pair), ' байт', "\n";
Ожидаемый результат
пара подписи: 96 байт

Секретная часть подписывает, публичная проверяет. Упаковку целиком не публикуют.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair_from_secretkey_and_publickey.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_keypair_from_secretkey_and_publickeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_sign_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_keypair_from_secretkey_and_publickey(string $secret_key, string $public_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_keypair_from_secretkey_and_publickey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$rebuilt = sodium_crypto_sign_keypair_from_secretkey_and_publickey(sodium_crypto_sign_secretkey($pair), sodium_crypto_sign_publickey($pair));
echo hash_equals($pair, $rebuilt) ? "пара собрана\n" : "ошибка\n";
Ожидаемый результат
пара собрана

Сборка полезна после чтения частей из хранилища; она не проверяет происхождение файлов.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_openПроверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

PHP 7.2+ · sodium

sodium_crypto_sign_open(string $signed_message, string $public_key): string|false

Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.

ПараметрЧто именно передать
$signed_messagestring. Сообщение, к которому sodium_crypto_sign уже присоединила подпись.
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_open(string $signed_message, string $public_key): string|false
Результатstring|false: успешные данные либо строго false при неуспешной проверке. Проверяйте === false до обработки результата.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_open: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$signed = sodium_crypto_sign('release-1.4.zip', sodium_crypto_sign_secretkey($pair));
$plain = sodium_crypto_sign_open($signed, sodium_crypto_sign_publickey($pair));
echo 'проверено: ', $plain, "\n";
$signed[0] = chr(ord($signed[0]) ^ 1);
echo sodium_crypto_sign_open($signed, sodium_crypto_sign_publickey($pair)) === false ? "подмена отклонена\n" : "подмена пропущена\n";
Ожидаемый результат
проверено: release-1.4.zip
подмена отклонена

Attached-форма возвращает подпись вместе с сообщением; open выдаёт сообщение только после проверки.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_publickeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_sign_publickey(string $key_pair): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_publickey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_publickey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_sign_publickey(sodium_crypto_sign_keypair());
echo 'открытый: ', strlen($part), ' байт', "\n";
Ожидаемый результат
открытый: 32 байт

Публичную часть распространяют проверяющим, секретную защищают от чтения и резервируют безопасно.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_secretkeyИзвлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

PHP 7.2+ · sodium

sodium_crypto_sign_secretkey(string $key_pair): string

Извлечь секретный ключ из упакованной пары для контролируемого хранения или совместимой операции.

ПараметрЧто именно передать
$key_pairstring. Упакованная пара ключей Sodium. Конкретная функция определяет, чьи открытый и секретный ключи должны в ней находиться.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_secretkey(string $key_pair): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_secretkey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$part = sodium_crypto_sign_secretkey(sodium_crypto_sign_keypair());
echo 'секретный: ', strlen($part), ' байт', "\n";
Ожидаемый результат
секретный: 64 байт

Публичную часть распространяют проверяющим, секретную защищают от чтения и резервируют безопасно.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_publickey_from_secretkeyИзвлечь открытый ключ из упакованной пары или секретного ключа.

PHP 7.2+ · sodium

sodium_crypto_sign_publickey_from_secretkey(string $secret_key): string

Извлечь открытый ключ из упакованной пары или секретного ключа.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_publickey_from_secretkey(string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_publickey_from_secretkey: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$a = sodium_crypto_sign_publickey($pair);
$b = sodium_crypto_sign_publickey_from_secretkey(sodium_crypto_sign_secretkey($pair));
echo hash_equals($a, $b) ? "открытый ключ совпал\n" : "ошибка\n";
Ожидаемый результат
открытый ключ совпал

Из секретного ключа подписи можно восстановить открытый; обратное невозможно.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_seed_keypairСоздать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

PHP 7.2+ · sodium

sodium_crypto_sign_seed_keypair(string $seed): string

Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.

ПараметрЧто именно передать
$seedstring. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_seed_keypair(string $seed): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_seed_keypair: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$seed = str_repeat("\x05", SODIUM_CRYPTO_SIGN_SEEDBYTES);
$first = sodium_crypto_sign_seed_keypair($seed);
$second = sodium_crypto_sign_seed_keypair($seed);
echo hash_equals($first, $second) ? "пара воспроизводится\n" : "ошибка\n";
Ожидаемый результат
пара воспроизводится

Seed равен по чувствительности секретному ключу и должен иметь полную случайность.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_sign_verify_detachedПроверить криптографическое подтверждение, не раскрывая секретный ключ.

PHP 7.2+ · sodium

sodium_crypto_sign_verify_detached(string $signature, string $message, string $public_key): bool

Проверить криптографическое подтверждение, не раскрывая секретный ключ.

ПараметрЧто именно передать
$signaturestring. Отделённая подпись заданной длины.
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$public_keystring. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить.
Часть контрактаЧто получить
Сигнатураsodium_crypto_sign_verify_detached(string $signature, string $message, string $public_key): bool
Результатbool: проверяемое условие выполнено или отклонено. Это итог проверки, а не расшифрованные данные.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_sign_verify_detached: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$pair = sodium_crypto_sign_keypair();
$secret = sodium_crypto_sign_secretkey($pair);
$public = sodium_crypto_sign_publickey($pair);
$manifest = 'release=1.4;sha256=demo';
$signature = sodium_crypto_sign_detached($manifest, $secret);
echo sodium_crypto_sign_verify_detached($signature, $manifest, $public) ? "подпись верна\n" : "ошибка\n";
echo sodium_crypto_sign_verify_detached($signature, $manifest . 'x', $public) ? "подмена пропущена\n" : "подмена отклонена\n";
Ожидаемый результат
подпись верна
подмена отклонена

Detached-подпись удобно хранить рядом с manifest. Открытый ключ должен быть заранее доверенным.

Рядом в этом семействе: sodium_crypto_sign, sodium_crypto_sign_detached, sodium_crypto_sign_ed25519_pk_to_curve25519, sodium_crypto_sign_ed25519_sk_to_curve25519, sodium_crypto_sign_keypair.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_streamНизкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

PHP 7.2+ · sodium

sodium_crypto_stream(int $length, string $nonce, string $key): string

Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

ПараметрЧто именно передать
$lengthint. Требуемое число байтов результата в допустимых для функции границах.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream(int $length, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);
$stream = sodium_crypto_stream(48, $nonce, $key);
echo 'поток: ', strlen($stream), ' байт', "\n";
Ожидаемый результат
поток: 48 байт

Поток выглядит случайным, но сам не подтверждает целостность. В прикладном формате используйте AEAD/secretstream.

Рядом в этом семействе: sodium_crypto_stream_keygen, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_keygen, sodium_crypto_stream_xchacha20_xor.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_keygenСоздать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.

PHP 7.2+ · sodium

sodium_crypto_stream_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_keygen, sodium_crypto_stream_xchacha20_xor.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_xorНизкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

PHP 7.2+ · sodium

sodium_crypto_stream_xor(string $message, string $nonce, string $key): string

Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_xor(string $message, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_xor: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);
$plain = 'фрагмент резервной копии';
$cipher = sodium_crypto_stream_xor($plain, $nonce, $key);
$plain = $cipher;
$restored = sodium_crypto_stream_xor($plain, $nonce, $key);
echo $restored, "\n";
Ожидаемый результат
фрагмент резервной копии

Повтор XOR с тем же потоком восстанавливает текст. Именно поэтому повтор nonce/counter с тем же ключом раскрывает связь сообщений; AEAD безопаснее.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_keygen, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_keygen, sodium_crypto_stream_xchacha20_xor.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_xchacha20Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

PHP 7.2+ · sodium

sodium_crypto_stream_xchacha20(int $length, string $nonce, string $key): string

Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

ПараметрЧто именно передать
$lengthint. Требуемое число байтов результата в допустимых для функции границах.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_xchacha20(int $length, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_xchacha20: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_xchacha20_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES);
$stream = sodium_crypto_stream_xchacha20(48, $nonce, $key);
echo 'поток: ', strlen($stream), ' байт', "\n";
Ожидаемый результат
поток: 48 байт

Поток выглядит случайным, но сам не подтверждает целостность. В прикладном формате используйте AEAD/secretstream.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_keygen, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20_keygen, sodium_crypto_stream_xchacha20_xor.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_xchacha20_keygenСоздать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.

PHP 7.2+ · sodium

sodium_crypto_stream_xchacha20_keygen(): string

Создать криптографически случайный ключ правильной длины для семейства Потоковые шифры низкого уровня.

ПараметрЧто именно передать
Параметров нетФункция сама получает безопасную случайность или читает возможность текущей среды.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_xchacha20_keygen(): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_xchacha20_keygen: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_xchacha20_keygen();
echo 'ключ создан: ', strlen($key), ' байт', "\n";
Ожидаемый результат
ключ создан: 32 байт

Выводим только длину случайного ключа. Сам ключ намеренно не попадает ни в страницу, ни в журнал.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_keygen, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_xor.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_xchacha20_xorНизкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

PHP 7.2+ · sodium

sodium_crypto_stream_xchacha20_xor(string $message, string $nonce, string $key): string

Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_xchacha20_xor(string $message, string $nonce, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_xchacha20_xor: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_xchacha20_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES);
$plain = 'фрагмент резервной копии';
$cipher = sodium_crypto_stream_xchacha20_xor($plain, $nonce, $key);
$plain = $cipher;
$restored = sodium_crypto_stream_xchacha20_xor($plain, $nonce, $key);
echo $restored, "\n";
Ожидаемый результат
фрагмент резервной копии

Повтор XOR с тем же потоком восстанавливает текст. Именно поэтому повтор nonce/counter с тем же ключом раскрывает связь сообщений; AEAD безопаснее.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_keygen, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_stream_xchacha20_xor_icНизкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

PHP 7.2+ · sodium

sodium_crypto_stream_xchacha20_xor_ic(string $message, string $nonce, int $counter, string $key): string

Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.

ПараметрЧто именно передать
$messagestring. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется.
$noncestring. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя.
$counterint. Счётчик блока низкоуровневого потока. Повтор пары nonce/counter с тем же ключом опасен.
$keystring. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка.
Часть контрактаЧто получить
Сигнатураsodium_crypto_stream_xchacha20_xor_ic(string $message, string $nonce, int $counter, string $key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_stream_xchacha20_xor_ic: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$key = sodium_crypto_stream_xchacha20_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES);
$plain = 'фрагмент резервной копии';
$cipher = sodium_crypto_stream_xchacha20_xor_ic($plain, $nonce, 7, $key);
$plain = $cipher;
$restored = sodium_crypto_stream_xchacha20_xor_ic($plain, $nonce, 7, $key);
echo $restored, "\n";
Ожидаемый результат
фрагмент резервной копии

Повтор XOR с тем же потоком восстанавливает текст. Именно поэтому повтор nonce/counter с тем же ключом раскрывает связь сообщений; AEAD безопаснее.

Рядом в этом семействе: sodium_crypto_stream, sodium_crypto_stream_keygen, sodium_crypto_stream_xor, sodium_crypto_stream_xchacha20, sodium_crypto_stream_xchacha20_keygen.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_addСложить два больших беззнаковых числа в little-endian представлении по модулю размера буфера.

PHP 7.2+ · sodium

sodium_add(string &$string1, string $string2): void

Сложить два больших беззнаковых числа в little-endian представлении по модулю размера буфера.

ПараметрЧто именно передать
&$string1string. Первая бинарная строка одинаковой с другой строкой длины.
$string2string. Вторая бинарная строка той же длины.
Часть контрактаЧто получить
Сигнатураsodium_add(string &$string1, string $string2): void
Результатvoid: отдельного значения нет; аргумент с & изменяется на месте.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_add: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$a = "\xff\x00";
$b = "\x01\x00";
sodium_add($a, $b);
echo sodium_bin2hex($a), "\n";
Ожидаемый результат
0001

Байты интерпретируются little-endian: 255 + 1 превращается в 256, то есть 00 01. Аргумент a изменён по ссылке.

Рядом в этом семействе: sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero, sodium_pad.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_compareСравнить два больших беззнаковых little-endian числа за постоянное время.

PHP 7.2+ · sodium

sodium_compare(string $string1, string $string2): int

Сравнить два больших беззнаковых little-endian числа за постоянное время.

ПараметрЧто именно передать
$string1string. Первая бинарная строка одинаковой с другой строкой длины.
$string2string. Вторая бинарная строка той же длины.
Часть контрактаЧто получить
Сигнатураsodium_compare(string $string1, string $string2): int
Результатint; смысл знака/значения указан в карточке и не заменяет проверку равенства там, где нужна constant-time операция.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_compare: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$a = "\x01\x00";
$b = "\x02\x00";
echo sodium_compare($a, $b) < 0 ? "1 меньше 2\n" : "ошибка\n";
Ожидаемый результат
1 меньше 2

Сравнение числовое для little-endian буферов одинаковой длины, а не лексикографическое сравнение текста.

Рядом в этом семействе: sodium_add, sodium_increment, sodium_memcmp, sodium_memzero, sodium_pad.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_incrementУвеличить большое little-endian число в изменяемой строке.

PHP 7.2+ · sodium

sodium_increment(string &$string): void

Увеличить большое little-endian число в изменяемой строке.

ПараметрЧто именно передать
&$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
Часть контрактаЧто получить
Сигнатураsodium_increment(string &$string): void
Результатvoid: отдельного значения нет; аргумент с & изменяется на месте.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_increment: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$counter = "\xff\x00";
sodium_increment($counter);
echo sodium_bin2hex($counter), "\n";
Ожидаемый результат
0001

Счётчик изменяется на месте с переносом между байтами.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_memcmp, sodium_memzero, sodium_pad.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_memcmpСравнить две бинарные строки одинаковой длины за постоянное время.

PHP 7.2+ · sodium

sodium_memcmp(string $string1, string $string2): int

Сравнить две бинарные строки одинаковой длины за постоянное время.

ПараметрЧто именно передать
$string1string. Первая бинарная строка одинаковой с другой строкой длины.
$string2string. Вторая бинарная строка той же длины.
Часть контрактаЧто получить
Сигнатураsodium_memcmp(string $string1, string $string2): int
Результатint; смысл знака/значения указан в карточке и не заменяет проверку равенства там, где нужна constant-time операция.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_memcmp: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$a = random_bytes(32);
$b = $a;
var_dump(sodium_memcmp($a, $b) === 0);
$b[0] = chr(ord($b[0]) ^ 1);
var_dump(sodium_memcmp($a, $b) !== 0);
Ожидаемый результат
bool(true)
bool(true)

Проверяется только ноль/не ноль. Для сравнения строк разной длины эта функция не предназначена.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memzero, sodium_pad.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_memzeroЗатереть содержимое изменяемой строки в памяти текущего PHP-процесса.

PHP 7.2+ · sodium

sodium_memzero(string &$string): void

Затереть содержимое изменяемой строки в памяти текущего PHP-процесса.

ПараметрЧто именно передать
&$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
Часть контрактаЧто получить
Сигнатураsodium_memzero(string &$string): void
Результатvoid: отдельного значения нет; аргумент с & изменяется на месте.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_memzero: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$secret = 'temporary-api-key';
sodium_memzero($secret);
var_dump($secret);
Ожидаемый результат
NULL

Переменная становится null после затирания конкретного буфера. Копии, журналы и прежние сериализации этим не удаляются.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_pad.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_padДополнить строку до кратной блоку длины по схеме libsodium.

PHP 7.2+ · sodium

sodium_pad(string $string, int $block_size): string

Дополнить строку до кратной блоку длины по схеме libsodium.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
$block_sizeint. Размер блока дополнения. Он должен быть положительным и соответствовать правилам протокола.
Часть контрактаЧто получить
Сигнатураsodium_pad(string $string, int $block_size): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_pad: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$plain = '1234567890';
$padded = sodium_pad($plain, 16);
echo 'до: ', strlen($plain), '; после: ', strlen($padded), "\n";
echo sodium_unpad($padded, 16), "\n";
Ожидаемый результат
до: 10; после: 16
1234567890

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

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_unpadПроверить и снять дополнение libsodium.

PHP 7.2+ · sodium

sodium_unpad(string $string, int $block_size): string

Проверить и снять дополнение libsodium.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
$block_sizeint. Размер блока дополнения. Он должен быть положительным и соответствовать правилам протокола.
Часть контрактаЧто получить
Сигнатураsodium_unpad(string $string, int $block_size): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_unpad: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$padded = sodium_pad('order=742', 16);
echo sodium_unpad($padded, 16), "\n";
Ожидаемый результат
order=742

Unpad проверяет формат дополнения. Произвольный обрезанный шифротекст до него доводить нельзя.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_bin2hexПредставить бинарные байты печатной шестнадцатеричной строкой.

PHP 7.2+ · sodium

sodium_bin2hex(string $string): string

Представить бинарные байты печатной шестнадцатеричной строкой.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
Часть контрактаЧто получить
Сигнатураsodium_bin2hex(string $string): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_bin2hex: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$bytes = "A\0B";
echo sodium_bin2hex($bytes), "\n";
Ожидаемый результат
410042

Hex делает видимым NUL-байт 00. Это кодирование, не шифрование.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_hex2binПреобразовать проверенную hex-строку обратно в бинарные байты.

PHP 7.2+ · sodium

sodium_hex2bin(string $string, string $ignore = ''): string

Преобразовать проверенную hex-строку обратно в бинарные байты.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
$ignore
по умолчанию: пустая строка
string. Явный список символов, которые разрешено пропустить при декодировании. Не используйте его для сокрытия произвольного мусора.
Часть контрактаЧто получить
Сигнатураsodium_hex2bin(string $string, string $ignore = ''): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_hex2bin: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$bytes = sodium_hex2bin('41:00:42', ':');
echo strlen($bytes), ' байта; ', sodium_bin2hex($bytes), "\n";
Ожидаемый результат
3 байта; 410042

ignore разрешает только явно указанный разделитель. Остальной неверный ввод должен быть отклонён.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_bin2base64Закодировать бинарные данные выбранным вариантом Base64.

PHP 7.2+ · sodium

sodium_bin2base64(string $string, int $id): string

Закодировать бинарные данные выбранным вариантом Base64.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
$idint. Одна из констант SODIUM_BASE64_VARIANT_*; отправитель и получатель должны выбрать один вариант.
Часть контрактаЧто получить
Сигнатураsodium_bin2base64(string $string, int $id): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_bin2base64: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$encoded = sodium_bin2base64("A\0B", SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
echo $encoded, "\n";
Ожидаемый результат
QQBC

URL-safe вариант удобен для URL/JSON, но остаётся открытым представлением байтов.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_base642binСтрого декодировать выбранный вариант Base64 в исходные байты.

PHP 7.2+ · sodium

sodium_base642bin(string $string, int $id, string $ignore = ''): string

Строго декодировать выбранный вариант Base64 в исходные байты.

ПараметрЧто именно передать
$stringstring. Входная бинарная строка либо текстовое представление для кодирования/декодирования.
$idint. Одна из констант SODIUM_BASE64_VARIANT_*; отправитель и получатель должны выбрать один вариант.
$ignore
по умолчанию: пустая строка
string. Явный список символов, которые разрешено пропустить при декодировании. Не используйте его для сокрытия произвольного мусора.
Часть контрактаЧто получить
Сигнатураsodium_base642bin(string $string, int $id, string $ignore = ''): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_base642bin: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$bytes = sodium_base642bin('QQBC', SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
echo sodium_bin2hex($bytes), "\n";
Ожидаемый результат
410042

Вариант декодирования должен совпасть с вариантом кодирования; строка проверяется до использования байтов.

Рядом в этом семействе: sodium_add, sodium_compare, sodium_increment, sodium_memcmp, sodium_memzero.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

sodium_crypto_scalarmult_baseНизкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

PHP 7.2+ · sodium

sodium_crypto_scalarmult_base(string $secret_key): string

Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.

ПараметрЧто именно передать
$secret_keystring. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал.
Часть контрактаЧто получить
Сигнатураsodium_crypto_scalarmult_base(string $secret_key): string
Результатstring. Бинарную строку не выводят как UTF-8: для транспорта выбирают hex/Base64 и сохраняют выбранный формат.
ОшибкиНеверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку.
ДоступностьPHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22.
sodium_crypto_scalarmult_base: минимальный наблюдаемый результатСамостоятельный пример
<?php
declare(strict_types=1);

$secret = random_bytes(SODIUM_CRYPTO_SCALARMULT_SCALARBYTES);
$public = sodium_crypto_scalarmult_base($secret);
echo 'открытый ключ: ', strlen($public), ' байт', "\n";
Ожидаемый результат
открытый ключ: 32 байт

Функция вычисляет публичную точку из секретного скаляра. Для обычной сессии безопаснее использовать KX.

Рядом в этом семействе: sodium_crypto_scalarmult, sodium_crypto_scalarmult_ristretto255, sodium_crypto_scalarmult_ristretto255_base.

Вернуться к карте Sodium; базовые термины: строка и байты, вызов функции, границы безопасности.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.