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

Дерево руководства
Глава 96 · От первой защищённой записи до протокола
Sodium: полный справочник шифрования, подписей, паролей и ключей
Все 110 функций и 102 константы Sodium: от первого Secretbox до AEAD, Box, подписей, password hashing, потоков, KDF/KX и низкоуровневых границ.
Первая полезная задача: сохранить API-токен так, чтобы подмена обнаружилась
Допустим, сервис хранит токен внешнего API. Обычный Base64 только меняет запись: любой, кто прочитал файл или базу, получает токен. Secretbox решает две задачи одновременно: скрывает текст и обнаруживает изменение записи. Для этого нужен один случайный секретный ключ. Он живёт в отдельном secret manager/переменной окружения с ограниченным доступом; в базе лежат версия формата, публичный nonce и ciphertext.
- Приложение читает 32-байтовый ключ из отдельной границы доверия
- Для одной записи создаёт новый 24-байтовый nonce
- Secretbox превращает токен в ciphertext + authenticator
- Nonce и ciphertext кодируются для текстового поля; ключ туда не входит
- При чтении 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 и групповая арифметика оставлены для уже спроектированных протоколов.
| Задача | Выбор | Что хранить/передать |
|---|---|---|
| Скрыть поле базы одним серверным ключом | Secretbox | version + nonce + ciphertext; ключ отдельно |
| Привязать шифротекст к ID заказа/заголовку | XChaCha20-Poly1305 AEAD | nonce + AAD + ciphertext; AAD остаётся открытым |
| Клиент шифрует серверу, зная только public key | Sealed box | public key сервера и ciphertext; отправитель анонимен |
| Два известных участника обмениваются сообщениями | Box | ключи сторон + уникальный nonce + ciphertext |
| Подтвердить релиз публично | Detached signature | сообщение + signature + доверенный public key |
| Подтвердить webhook общим секретом | MAC | message + MAC; общий key у двух сторон |
| Хранить пароль аккаунта | pwhash_str или password_hash | самодостаточная hash-строка |
| Получить ключ шифрования из пароля | raw pwhash | salt + algo + limits; результат — secret key |
| Шифровать большой архив по блокам | Secretstream | header + упорядоченные блоки + обязательный FINAL |
| Развести ключи подсистем от одного master key | KDF | master отдельно; фиксированные context и ID в спецификации |
До криптографии: raw bytes, hex, Base64 и почему формат ломает открытие
Ключ, nonce, подпись и ciphertext — бинарные PHP-строки. Они могут содержать нулевой байт и не обязаны быть UTF-8. JSON, HTML-форма и переменная окружения требуют текстового представления: обычно Base64 URL-safe либо hex. Кодирование обратимо и не скрывает данные.
- Функция Sodium возвращает raw bytes
- Перед JSON/формой: bin2base64 или bin2hex
- Получатель проверяет выбранный вариант и строго декодирует
- Проверяет длину и использует raw bytes в том же примитиве
- false/исключение останавливает обработку; испорченные байты не «чинят» обрезкой
<?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.
<?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 | Высокоуровневый интерфейс современной криптографии; не набор взаимозаменяемых алгоритмов. |
| Requirements | libsodium ≥ 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_VERSION | 1.0.22 | фактическая версия связанной libsodium |
SODIUM_LIBRARY_MAJOR_VERSION | 26 | фактическая версия связанной libsodium |
SODIUM_LIBRARY_MINOR_VERSION | 4 | фактическая версия связанной libsodium |
AEAD
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES | 12 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES | 16 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES | 16 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_AEGIS128L_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES | 16 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_AEGIS128L_ABYTES | 32 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_AEGIS256_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES | 32 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES | 32 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES | 8 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES | 16 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES | 12 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES | 16 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES | 0 | длина секретного nonce; обычно 0, параметр не передаётся |
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES | 24 | длина публичного nonce в байтах |
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES | 16 | служебные байты аутентификатора сверх открытого текста |
MAC
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_AUTH_BYTES | 32 | длина основного результата в байтах |
SODIUM_CRYPTO_AUTH_KEYBYTES | 32 | длина ключа в байтах |
Box
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_BOX_SEALBYTES | 48 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_BOX_SECRETKEYBYTES | 32 | длина секретного ключа |
SODIUM_CRYPTO_BOX_PUBLICKEYBYTES | 32 | длина открытого ключа |
SODIUM_CRYPTO_BOX_KEYPAIRBYTES | 64 | длина упакованной пары ключей |
SODIUM_CRYPTO_BOX_MACBYTES | 16 | длина кода аутентификации |
SODIUM_CRYPTO_BOX_NONCEBYTES | 24 | длина nonce в байтах |
SODIUM_CRYPTO_BOX_SEEDBYTES | 32 | строгая длина seed |
KDF
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_KDF_BYTES_MIN | 16 | минимальная длина результата |
SODIUM_CRYPTO_KDF_BYTES_MAX | 64 | максимальная длина результата |
SODIUM_CRYPTO_KDF_CONTEXTBYTES | 8 | строгая длина контекста KDF |
SODIUM_CRYPTO_KDF_KEYBYTES | 32 | длина ключа в байтах |
KX
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_KX_SEEDBYTES | 32 | строгая длина seed |
SODIUM_CRYPTO_KX_SESSIONKEYBYTES | 32 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_KX_PUBLICKEYBYTES | 32 | длина открытого ключа |
SODIUM_CRYPTO_KX_SECRETKEYBYTES | 32 | длина секретного ключа |
SODIUM_CRYPTO_KX_KEYPAIRBYTES | 64 | длина упакованной пары ключей |
Secretstream
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES | 17 | служебные байты аутентификатора сверх открытого текста |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES | 24 | длина публичного заголовка потока |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX | 274877906816 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE | 0 | тег границы/состояния блока secretstream |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH | 1 | тег границы/состояния блока secretstream |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY | 2 | тег границы/состояния блока secretstream |
SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL | 3 | тег границы/состояния блока secretstream |
Generichash
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_GENERICHASH_BYTES | 32 | длина основного результата в байтах |
SODIUM_CRYPTO_GENERICHASH_BYTES_MIN | 16 | минимальная длина результата |
SODIUM_CRYPTO_GENERICHASH_BYTES_MAX | 64 | максимальная длина результата |
SODIUM_CRYPTO_GENERICHASH_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN | 16 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX | 64 | официальная константа алгоритма или его допустимой границы |
Password hashing
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 | 1 | идентификатор варианта password hashing |
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 | 2 | идентификатор варианта password hashing |
SODIUM_CRYPTO_PWHASH_ALG_DEFAULT | 2 | идентификатор варианта password hashing |
SODIUM_CRYPTO_PWHASH_SALTBYTES | 16 | строгая длина соли |
SODIUM_CRYPTO_PWHASH_STRPREFIX | $argon2id$ | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE | 2 | готовый профиль вычислительной работы |
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE | 67108864 | готовый профиль памяти в байтах |
SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE | 3 | готовый профиль вычислительной работы |
SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE | 268435456 | готовый профиль памяти в байтах |
SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE | 4 | готовый профиль вычислительной работы |
SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE | 1073741824 | готовый профиль памяти в байтах |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES | 32 | строгая длина соли |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX | $7$ | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE | 524288 | готовый профиль вычислительной работы |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE | 16777216 | готовый профиль памяти в байтах |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE | 33554432 | готовый профиль вычислительной работы |
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE | 1073741824 | готовый профиль памяти в байтах |
Scalarmult
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_SCALARMULT_BYTES | 32 | длина основного результата в байтах |
SODIUM_CRYPTO_SCALARMULT_SCALARBYTES | 32 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES | 32 | длина основного результата в байтах |
SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES | 32 | официальная константа алгоритма или его допустимой границы |
Shorthash
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_SHORTHASH_BYTES | 8 | длина основного результата в байтах |
SODIUM_CRYPTO_SHORTHASH_KEYBYTES | 16 | длина ключа в байтах |
Secretbox
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_SECRETBOX_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_SECRETBOX_MACBYTES | 16 | длина кода аутентификации |
SODIUM_CRYPTO_SECRETBOX_NONCEBYTES | 24 | длина nonce в байтах |
Подписи
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_SIGN_BYTES | 64 | длина основного результата в байтах |
SODIUM_CRYPTO_SIGN_SEEDBYTES | 32 | строгая длина seed |
SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES | 32 | длина открытого ключа |
SODIUM_CRYPTO_SIGN_SECRETKEYBYTES | 64 | длина секретного ключа |
SODIUM_CRYPTO_SIGN_KEYPAIRBYTES | 96 | длина упакованной пары ключей |
Потоковые примитивы
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_STREAM_NONCEBYTES | 24 | длина nonce в байтах |
SODIUM_CRYPTO_STREAM_KEYBYTES | 32 | длина ключа в байтах |
SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES | 24 | длина nonce в байтах |
SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES | 32 | длина ключа в байтах |
Варианты Base64
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_BASE64_VARIANT_ORIGINAL | 1 | вариант алфавита и padding Base64 |
SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING | 3 | вариант алфавита и padding Base64 |
SODIUM_BASE64_VARIANT_URLSAFE | 5 | вариант алфавита и padding Base64 |
SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING | 7 | вариант алфавита и padding Base64 |
Ristretto255
| Имя | PHP 8.5.11 | Смысл |
|---|---|---|
SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES | 32 | длина основного результата в байтах |
SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES | 64 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES | 32 | официальная константа алгоритма или его допустимой границы |
SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES | 64 | официальная константа алгоритма или его допустимой границы |
SodiumException: ошибка контракта отличается от отказа проверки
SodiumException наследует Exception и не добавляет собственных методов. Она сообщает, что операция не может быть выполнена: например, длина nonce/key неверна. Это отличается от false у open/decrypt/verify, когда вход имеет допустимую форму, но криптографическая проверка не прошла.
<?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 защищает последовательность блоков, отличает сообщения, смену ключа и конец потока.
sodium_crypto_secretstream_xchacha20poly1305_keygen— Создать криптографически случайный ключ правильной длины для семейства Secretstream: большие и потоковые данные.sodium_crypto_secretstream_xchacha20poly1305_init_push— Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.sodium_crypto_secretstream_xchacha20poly1305_push— Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.sodium_crypto_secretstream_xchacha20poly1305_init_pull— Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.sodium_crypto_secretstream_xchacha20poly1305_pull— Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.sodium_crypto_secretstream_xchacha20poly1305_rekey— Выполнить один шаг защищённого потока XChaCha20-Poly1305 с состоянием и явной границей сообщения.
Каждая ссылка открывает отдельную карточку с полной сигнатурой, параметрами, типом результата, ошибками, версией и исполняемым примером.
Короткий 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 вернул false | Base64/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-ключи в онлайн-декодер и не добавляйте их в тикет.
Маршрут изучения и контроль готовности
- Понять PHP-строку как контейнер байтов и обратимое кодирование
- Выполнить secretbox round-trip и увидеть false после подмены
- Спроектировать формат version + key_id + nonce/header + ciphertext
- Выбрать AEAD/box/signature/password API по задаче, а не по названию алгоритма
- Добавить ротацию, резервное восстановление и нейтральную обработку отказов
- Зафиксировать межъязыковые fixtures и негативные тесты
- Только для готового протокола переходить к 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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 или шифротекст не совпали.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Зашифровать сообщение и добавить проверку целостности; связанные данные останутся открытыми, но будут защищены от подмены.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$additional_data | string. Связанные, но не зашифрованные данные: например ID заказа и версия формата. При расшифровке нужны ровно те же байты. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 для сообщения с общим секретным ключом.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Проверить криптографическое подтверждение, не раскрывая секретный ключ.
| Параметр | Что именно передать |
|---|---|
$mac | string. Код подлинности, полученный для тех же сообщения и ключа. |
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Защитить сообщение между участниками с помощью их открытых и секретных ключей.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key_pair | string. Упакованная пара ключей 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. |
<?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. |
<?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Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
| Параметр | Что именно передать |
|---|---|
$seed | string. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
$public_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key_pair | string. Упакованная пара ключей 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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Защитить сообщение между участниками с помощью их открытых и секретных ключей.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$public_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$key_pair | string. Упакованная пара ключей 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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$p | string. Закодированная точка допустимой группы. |
$q | string. Вторая закодированная точка той же группы. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$x | string. Первый скаляр фиксированной длины. |
$y | string. Второй скаляр фиксированной длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$x | string. Первый скаляр фиксированной длины. |
$y | string. Второй скаляр фиксированной длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$s | string. Бинарный скаляр или вход фиксированной длины; точное назначение зависит от операции. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$x | string. Первый скаляр фиксированной длины. |
$y | string. Второй скаляр фиксированной длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$p | string. Закодированная точка допустимой группы. |
$q | string. Вторая закодированная точка той же группы. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
| Параметр | Что именно передать |
|---|---|
$seed | string. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_pair | string. Пара ключей клиента KX: из неё используются и публичная, и секретная части. |
$server_key | string. Публичный ключ сервера, полученный по доверенному каналу. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_pair | string. Пара ключей сервера KX. |
$client_key | string. Публичный ключ клиента. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. 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. |
<?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. |
<?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. |
<?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.
| Параметр | Что именно передать |
|---|---|
&$state | string. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную. |
$message | string. Открытые байты сообщения. 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. |
<?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.
| Параметр | Что именно передать |
|---|---|
&$state | string. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную. |
$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. |
<?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_length | int. Длина производного ключа в байтах. |
$subkey_id | int. Числовой ID назначения ключа. Один master key с разными ID даёт разные независимые подключи. |
$context | string. Ровно 8 ASCII-байтов пространства имён приложения, например ORDERS01. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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, либо выводит бинарный ключ.
| Параметр | Что именно передать |
|---|---|
$length | int. Требуемое число байтов результата в допустимых для функции границах. |
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
$salt | string. Случайная соль точной длины. Её сохраняют вместе с параметрами; она не является секретом. |
$opslimit | int. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине. |
$memlimit | int. Лимит памяти в байтах. Его согласуют с 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. |
<?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, либо выводит бинарный ключ.
| Параметр | Что именно передать |
|---|---|
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
$opslimit | int. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине. |
$memlimit | int. Лимит памяти в байтах. Его согласуют с 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. |
<?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Проверить криптографическое подтверждение, не раскрывая секретный ключ.
| Параметр | Что именно передать |
|---|---|
$hash | string. Сохранённая строка хеша с параметрами, а не исходный пароль. |
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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, либо выводит бинарный ключ.
| Параметр | Что именно передать |
|---|---|
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
$opslimit | int. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине. |
$memlimit | int. Лимит памяти в байтах. Его согласуют с 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. |
<?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, либо выводит бинарный ключ.
| Параметр | Что именно передать |
|---|---|
$length | int. Требуемое число байтов результата в допустимых для функции границах. |
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
$salt | string. Случайная соль точной длины. Её сохраняют вместе с параметрами; она не является секретом. |
$opslimit | int. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине. |
$memlimit | int. Лимит памяти в байтах. Его согласуют с 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. |
<?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, либо выводит бинарный ключ.
| Параметр | Что именно передать |
|---|---|
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
$opslimit | int. Лимит вычислительной работы. Берут согласованную константу профиля и измеряют на целевой машине. |
$memlimit | int. Лимит памяти в байтах. Его согласуют с 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. |
<?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Проверить криптографическое подтверждение, не раскрывая секретный ключ.
| Параметр | Что именно передать |
|---|---|
$hash | string. Сохранённая строка хеша с параметрами, а не исходный пароль. |
$password | string. Пароль либо строка хеша — это уточняется конкретной функцией. Пароль считается секретным. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$n | string. Секретный скаляр фиксированной длины. |
$p | string. Закодированная точка допустимой группы. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$n | string. Секретный скаляр фиксированной длины. |
$p | string. Закодированная точка допустимой группы. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая операция эллиптической группы для реализации уже спроектированного и проверенного протокола.
| Параметр | Что именно передать |
|---|---|
$n | string. Секретный скаляр фиксированной длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Проверить и открыть защищённое сообщение; отказ нельзя смешивать с допустимой пустой строкой.
| Параметр | Что именно передать |
|---|---|
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией encrypt/box/stream, а не редактируют как текст. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 с состоянием и явной границей сообщения.
| Параметр | Что именно передать |
|---|---|
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 с состоянием и явной границей сообщения.
| Параметр | Что именно передать |
|---|---|
&$state | string. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную. |
$message | string. Открытые байты сообщения. 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. |
<?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 с состоянием и явной границей сообщения.
| Параметр | Что именно передать |
|---|---|
$header | string. Публичный заголовок secretstream из init_push; он нужен получателю до первого блока. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 с состоянием и явной границей сообщения.
| Параметр | Что именно передать |
|---|---|
&$state | string. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную. |
$ciphertext | string. Шифротекст вместе с аутентификатором. Его получают совместимой функцией 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. |
<?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 с состоянием и явной границей сообщения.
| Параметр | Что именно передать |
|---|---|
&$state | string. Изменяемое внутреннее состояние операции. Амперсанд в сигнатуре означает, что функция обновляет эту переменную. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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-хеш для внутренней хеш-таблицы; это не подпись и не хеш пароля.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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 для подтверждения автора и целостности сообщения.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$secret_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 для подтверждения автора и целостности сообщения.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$secret_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
$public_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_message | string. Сообщение, к которому sodium_crypto_sign уже присоединила подпись. |
$public_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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_pair | string. Упакованная пара ключей 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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Создать или собрать пару ключей в бинарном формате, который ожидают функции этого семейства.
| Параметр | Что именно передать |
|---|---|
$seed | string. Ровно заданное число исходных байтов для воспроизводимого получения пары. Это не короткий пароль. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Проверить криптографическое подтверждение, не раскрывая секретный ключ.
| Параметр | Что именно передать |
|---|---|
$signature | string. Отделённая подпись заданной длины. |
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$public_key | string. Открытый ключ: его разрешено распространять, но источник ключа всё равно надо подтвердить. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
| Параметр | Что именно передать |
|---|---|
$length | int. Требуемое число байтов результата в допустимых для функции границах. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
| Параметр | Что именно передать |
|---|---|
$length | int. Требуемое число байтов результата в допустимых для функции границах. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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. |
<?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Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Низкоуровневая потоковая операция; она не аутентифицирует данные и требует отдельного протокола целостности.
| Параметр | Что именно передать |
|---|---|
$message | string. Открытые байты сообщения. PHP-строка здесь является контейнером байтов; кодировка сама не меняется. |
$nonce | string. Одноразовый номер сообщения требуемой длины. Его передают рядом с шифротекстом; секретом он не является, но повторять его с тем же ключом нельзя. |
$counter | int. Счётчик блока низкоуровневого потока. Повтор пары nonce/counter с тем же ключом опасен. |
$key | string. Секретный ключ точной длины для выбранного примитива. Не пароль пользователя и не произвольная строка. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 представлении по модулю размера буфера.
| Параметр | Что именно передать |
|---|---|
&$string1 | string. Первая бинарная строка одинаковой с другой строкой длины. |
$string2 | string. Вторая бинарная строка той же длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | sodium_add(string &$string1, string $string2): void |
| Результат | void: отдельного значения нет; аргумент с & изменяется на месте. |
| Ошибки | Неверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку. |
| Доступность | PHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22. |
<?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 числа за постоянное время.
| Параметр | Что именно передать |
|---|---|
$string1 | string. Первая бинарная строка одинаковой с другой строкой длины. |
$string2 | string. Вторая бинарная строка той же длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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 число в изменяемой строке.
| Параметр | Что именно передать |
|---|---|
&$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | sodium_increment(string &$string): void |
| Результат | void: отдельного значения нет; аргумент с & изменяется на месте. |
| Ошибки | Неверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку. |
| Доступность | PHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22. |
<?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Сравнить две бинарные строки одинаковой длины за постоянное время.
| Параметр | Что именно передать |
|---|---|
$string1 | string. Первая бинарная строка одинаковой с другой строкой длины. |
$string2 | string. Вторая бинарная строка той же длины. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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-процесса.
| Параметр | Что именно передать |
|---|---|
&$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | sodium_memzero(string &$string): void |
| Результат | void: отдельного значения нет; аргумент с & изменяется на месте. |
| Ошибки | Неверный PHP-тип даёт TypeError; недопустимая длина/значение обычно даёт SodiumException или ValueError. Отказ проверки, задокументированный как false, не превращайте в пустую строку. |
| Доступность | PHP 7.2+; локальные примеры проверяются на PHP 8.5.11 / libsodium 1.0.22. |
<?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.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
$block_size | int. Размер блока дополнения. Он должен быть положительным и соответствовать правилам протокола. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
$block_size | int. Размер блока дополнения. Он должен быть положительным и соответствовать правилам протокола. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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Представить бинарные байты печатной шестнадцатеричной строкой.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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-строку обратно в бинарные байты.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
$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. |
<?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.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
$id | int. Одна из констант 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. |
<?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 в исходные байты.
| Параметр | Что именно передать |
|---|---|
$string | string. Входная бинарная строка либо текстовое представление для кодирования/декодирования. |
$id | int. Одна из констант 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. |
<?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_key | string. Секретный ключ точной длины. Его не выводят, не передают клиенту и не пишут в журнал. |
| Часть контракта | Что получить |
|---|---|
| Сигнатура | 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. |
<?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; базовые термины: строка и байты, вызов функции, границы безопасности.
Источники и обсуждения
- PHP: book.sodium
- PHP: sodium.setup
- PHP: sodium.requirements
- PHP: sodium.installation
- PHP: sodium.constants
- PHP: ref.sodium
- PHP: function.sodium-add
- PHP: function.sodium-base642bin
- PHP: function.sodium-bin2base64
- PHP: function.sodium-bin2hex
- PHP: function.sodium-compare
- PHP: function.sodium-crypto-aead-aegis128l-decrypt
- PHP: function.sodium-crypto-aead-aegis128l-encrypt
- PHP: function.sodium-crypto-aead-aegis128l-keygen
- PHP: function.sodium-crypto-aead-aegis256-decrypt
- PHP: function.sodium-crypto-aead-aegis256-encrypt
- PHP: function.sodium-crypto-aead-aegis256-keygen
- PHP: function.sodium-crypto-aead-aes256gcm-decrypt
- PHP: function.sodium-crypto-aead-aes256gcm-encrypt
- PHP: function.sodium-crypto-aead-aes256gcm-is-available
- PHP: function.sodium-crypto-aead-aes256gcm-keygen
- PHP: function.sodium-crypto-aead-chacha20poly1305-decrypt
- PHP: function.sodium-crypto-aead-chacha20poly1305-encrypt
- PHP: function.sodium-crypto-aead-chacha20poly1305-ietf-decrypt
- PHP: function.sodium-crypto-aead-chacha20poly1305-ietf-encrypt
- PHP: function.sodium-crypto-aead-chacha20poly1305-ietf-keygen
- PHP: function.sodium-crypto-aead-chacha20poly1305-keygen
- PHP: function.sodium-crypto-aead-xchacha20poly1305-ietf-decrypt
- PHP: function.sodium-crypto-aead-xchacha20poly1305-ietf-encrypt
- PHP: function.sodium-crypto-aead-xchacha20poly1305-ietf-keygen
- PHP: function.sodium-crypto-auth
- PHP: function.sodium-crypto-auth-keygen
- PHP: function.sodium-crypto-auth-verify
- PHP: function.sodium-crypto-box
- PHP: function.sodium-crypto-box-keypair
- PHP: function.sodium-crypto-box-keypair-from-secretkey-and-publickey
- PHP: function.sodium-crypto-box-open
- PHP: function.sodium-crypto-box-publickey
- PHP: function.sodium-crypto-box-publickey-from-secretkey
- PHP: function.sodium-crypto-box-seal
- PHP: function.sodium-crypto-box-seal-open
- PHP: function.sodium-crypto-box-secretkey
- PHP: function.sodium-crypto-box-seed-keypair
- PHP: function.sodium-crypto-core-ristretto255-add
- PHP: function.sodium-crypto-core-ristretto255-from-hash
- PHP: function.sodium-crypto-core-ristretto255-is-valid-point
- PHP: function.sodium-crypto-core-ristretto255-random
- PHP: function.sodium-crypto-core-ristretto255-scalar-add
- PHP: function.sodium-crypto-core-ristretto255-scalar-complement
- PHP: function.sodium-crypto-core-ristretto255-scalar-invert
- PHP: function.sodium-crypto-core-ristretto255-scalar-mul
- PHP: function.sodium-crypto-core-ristretto255-scalar-negate
- PHP: function.sodium-crypto-core-ristretto255-scalar-random
- PHP: function.sodium-crypto-core-ristretto255-scalar-reduce
- PHP: function.sodium-crypto-core-ristretto255-scalar-sub
- PHP: function.sodium-crypto-core-ristretto255-sub
- PHP: function.sodium-crypto-generichash
- PHP: function.sodium-crypto-generichash-final
- PHP: function.sodium-crypto-generichash-init
- PHP: function.sodium-crypto-generichash-keygen
- PHP: function.sodium-crypto-generichash-update
- PHP: function.sodium-crypto-kdf-derive-from-key
- PHP: function.sodium-crypto-kdf-keygen
- PHP: function.sodium-crypto-kx-client-session-keys
- PHP: function.sodium-crypto-kx-keypair
- PHP: function.sodium-crypto-kx-publickey
- PHP: function.sodium-crypto-kx-secretkey
- PHP: function.sodium-crypto-kx-seed-keypair
- PHP: function.sodium-crypto-kx-server-session-keys
- PHP: function.sodium-crypto-pwhash
- PHP: function.sodium-crypto-pwhash-scryptsalsa208sha256
- PHP: function.sodium-crypto-pwhash-scryptsalsa208sha256-str
- PHP: function.sodium-crypto-pwhash-scryptsalsa208sha256-str-verify
- PHP: function.sodium-crypto-pwhash-str
- PHP: function.sodium-crypto-pwhash-str-needs-rehash
- PHP: function.sodium-crypto-pwhash-str-verify
- PHP: function.sodium-crypto-scalarmult
- PHP: function.sodium-crypto-scalarmult-base
- PHP: function.sodium-crypto-scalarmult-ristretto255
- PHP: function.sodium-crypto-scalarmult-ristretto255-base
- PHP: function.sodium-crypto-secretbox
- PHP: function.sodium-crypto-secretbox-keygen
- PHP: function.sodium-crypto-secretbox-open
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-init-pull
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-init-push
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-keygen
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-pull
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-push
- PHP: function.sodium-crypto-secretstream-xchacha20poly1305-rekey
- PHP: function.sodium-crypto-shorthash
- PHP: function.sodium-crypto-shorthash-keygen
- PHP: function.sodium-crypto-sign
- PHP: function.sodium-crypto-sign-detached
- PHP: function.sodium-crypto-sign-ed25519-pk-to-curve25519
- PHP: function.sodium-crypto-sign-ed25519-sk-to-curve25519
- PHP: function.sodium-crypto-sign-keypair
- PHP: function.sodium-crypto-sign-keypair-from-secretkey-and-publickey
- PHP: function.sodium-crypto-sign-open
- PHP: function.sodium-crypto-sign-publickey
- PHP: function.sodium-crypto-sign-publickey-from-secretkey
- PHP: function.sodium-crypto-sign-secretkey
- PHP: function.sodium-crypto-sign-seed-keypair
- PHP: function.sodium-crypto-sign-verify-detached
- PHP: function.sodium-crypto-stream
- PHP: function.sodium-crypto-stream-keygen
- PHP: function.sodium-crypto-stream-xchacha20
- PHP: function.sodium-crypto-stream-xchacha20-keygen
- PHP: function.sodium-crypto-stream-xchacha20-xor
- PHP: function.sodium-crypto-stream-xchacha20-xor-ic
- PHP: function.sodium-crypto-stream-xor
- PHP: function.sodium-hex2bin
- PHP: function.sodium-increment
- PHP: function.sodium-memcmp
- PHP: function.sodium-memzero
- PHP: function.sodium-pad
- PHP: function.sodium-unpad
- PHP: class.sodiumexception
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


