(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"