CascadiaPHP 2024

sodium_crypto_secretbox

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_secretboxШифрует общим ключом с проверкой подлинности

Описание

sodium_crypto_secretbox(#[\SensitiveParameter] string $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 требуются те же имя и ключ
var_dump(sodium_crypto_secretbox_open($ciphertext, $nonce, $key));

?>

Вывод приведённого примера будет похож на:

string(78) "3a1fa3e9f7b72ef8be51d40abf8e296c6899c185d07b18b4c93e7f26aa776d24c50852cd6b1076"
string(23) "message to be encrypted"

Смотрите также

add a note

User Contributed Notes 1 note

up
0
celso fontes
3 years ago
An example to how encrypt or decrypt using sodium:

<?php

$key
= random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox("Hello World !", $nonce, $key);

$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if (
$plaintext === false) {
throw new
Exception("Bad ciphertext");
}

echo
$plaintext;
To Top