(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_secretbox_open — Desencriptación autenticada con una clave compartida
$ciphertext
, string $nonce
, #[\SensitiveParameter] string $key
): string|falseDesencriptación de un mensaje cifrado con una clave simétrica (compartida).
ciphertext
Debe estar en el formato proporcionado por sodium_crypto_secretbox() (concatenación del texto cifrado y del tag).
nonce
Un número que debe ser utilizado una sola vez, por mensaje. 24 bytes de longitud. Este es un límite suficientemente grande para ser generado aleatoriamente (i.e. random_bytes()).
key
La clave de cifrado (256 bits).
La cadena desencriptada en caso de éxito o false
en caso de error.
nonce
tiene una longitud de bytes diferente de
SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
(24 bytes), se lanzará una SodiumException.
key
tiene una longitud de bytes diferente de
SODIUM_CRYPTO_SECRETBOX_KEYBYTES
(32 bytes), se lanzará una SodiumException.
Ejemplo #1 Ejemplo de sodium_crypto_secretbox_open()
<?php
// La $key debe ser mantenida confidencial
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
// No reutilizar $nonce con la misma clave
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox('mensaje a ser cifrado', $nonce, $key);
// El mismo nonce y la misma clave son necesarios para desencriptar el $ciphertext
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if ($plaintext !== false) {
echo $plaintext . PHP_EOL;
}
?>
El resultado del ejemplo sería:
mensaje a ser cifrado