CakeFest 2024: The Official CakePHP Conference

sodium_crypto_secretbox_open

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_secretbox_openРасшифровка с использованием общего ключа с проверкой подлинности

Описание

sodium_crypto_secretbox_open(string $ciphertext, string $nonce, string $key): string|false

Расшифровывает зашифрованное сообщение симметричным (общим) ключом.

Список параметров

ciphertext

Должен быть в формате, предоставленном sodium_crypto_secretbox() (зашифрованный текст и тег, объединённые).

nonce

Номер, который необходимо использовать только один раз для каждого сообщения. Длина 24 байта. Это достаточно большая граница для случайной генерации (например, random_bytes()).

key

Ключ шифрования (256 бит).

Возвращаемые значения

Расшифрованная строка в случае успешного выполнения или false, если возникла ошибка.

Ошибки

Примеры

Пример #1 Пример использования sodium_crypto_secretbox_open()

<?php
// $key должен храниться в секрете.
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
// Не используйте $nonce повторно с тем же ключом
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox('message to be encrypted', $nonce, $key);

// Для расшифровки $ciphertext требуются те же имя и ключ.
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if (
$plaintext !== false) {
echo
$plaintext . PHP_EOL;
}
?>

Результат выполнения приведённого примера:

message to be encrypted

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

add a note

User Contributed Notes 1 note

up
3
khalyomede at gmail dot com
5 years ago
This method will return a string, or false if the data failed to be decrypted.

$key = 'secret';
$data = 'binarydata';
$nonce = random_bytes(SODIUM_CRYPT_SECRETBOX_NONCEBYTES);

$decrypted = sodium_crypto_secretbox_open($data, $nonce, $key);

if ($decrypted === false) {
throw new Exception('failed to decrypt data');
}
To Top