PHP 7.4.25 Released!

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

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

  • sodium_crypto_secretbox() - Шифрование с общим ключом с проверкой подлинности
  • sodium_crypto_secretbox_keygen() - Создаёт случайный ключ для sodium_crypto_secretbox
  • random_bytes() - Генерирует криптографически безопасные псевдослучайные байты

add a note add a note

User Contributed Notes 1 note

up
3
khalyomede at gmail dot com
2 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