(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_secretbox — Шифрует общим ключом с проверкой подлинности
$message, string $nonce, #[\SensitiveParameter] string $key): stringФункция шифрует сообщения симметричным (общим) ключом.
messageТекстовое сообщение, которое нужно зашифровать.
nonceНомер, который необходимо использовать только один раз для каждого сообщения. Длина 24 байта. Это достаточно большая граница, чтобы генерировать её случайно (например, функцией random_bytes()).
keyКлюч шифрования (256 бит).
Функция возвращает зашифрованную строку.
Функция выбрасывает исключение SodiumException,
если длина байтов параметра nonce отличается от значения константы
SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
(24 байта).
Функция выбрасывает исключение SodiumException,
если длина байтов параметра key отличается от значения константы
SODIUM_CRYPTO_SECRETBOX_KEYBYTES
(32 байта).
Функция выбрасывает исключение SodiumException, если возникла ошибка.
Пример #1 Пример использования функции sodium_crypto_secretbox()
<?php
// Значение переменной $key должно храниться в секрете
$key = sodium_crypto_secretbox_keygen();
// Не используйте переменную $nonce повторно с тем же ключом
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$plaintext = "message to be encrypted";
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);
var_dump(bin2hex($ciphertext));
// Для расшифровки переменной $ciphertext требуются те же nonce и ключ
var_dump(sodium_crypto_secretbox_open($ciphertext, $nonce, $key));
?>Вывод приведённого примера будет похож на:
string(78) "3a1fa3e9f7b72ef8be51d40abf8e296c6899c185d07b18b4c93e7f26aa776d24c50852cd6b1076" string(23) "message to be encrypted"