PHP Conference Japan 2024

sodium_crypto_secretbox_open

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_secretbox_open已驗證的共用金鑰解密

描述

sodium_crypto_secretbox_open(字串 $ciphertext, 字串 $nonce, #[\SensitiveParameter] 字串 $key): 字串|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('要加密的訊息', $nonce, $key);

// 需要相同的 nonce 和金鑰才能解密 $ciphertext
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if (
$plaintext !== false) {
echo
$plaintext . PHP_EOL;
}
?>

以上範例會輸出

message to be encrypted

參見

新增註解

使用者貢獻的註解 1 則註解

khalyomede at gmail dot com
5 年前
如果資料解密失敗,此方法將回傳字串或 false。

$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