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