函式名:sodium_crypto_box()
適用版本:PHP 7.2.0 及以上版本
用法:sodium_crypto_box() 函式用於使用公鑰加密和私鑰解密資料,基於 X25519 金鑰交換和 XSalsa20-Poly1305 加密演算法。
語法:
string sodium_crypto_box(string $message, string $nonce, string $publicKey, string $secretKey)
引數:
- $message: 要加密的訊息,為字串型別。
- $nonce: 用於加密的隨機字串,為字串型別,長度為 sodium_crypto_box_NONCEBYTES 位元組。
- $publicKey: 公鑰,為字串型別,長度為 sodium_crypto_box_PUBLICKEYBYTES 位元組。
- $secretKey: 私鑰,為字串型別,長度為 sodium_crypto_box_SECRETKEYBYTES 位元組。
返回值:
- 如果加密成功,則返回加密後的字串,長度為訊息長度加上 sodium_crypto_box_MACBYTES 位元組。
- 如果加密失敗,則返回 false。
示例:
// 生成公鑰和私鑰
$keyPair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keyPair);
$secretKey = sodium_crypto_box_secretkey($keyPair);
// 要加密的訊息
$message = "Hello, world!";
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES); // 生成隨機的 nonce
// 使用公鑰加密訊息
$ciphertext = sodium_crypto_box($message, $nonce, $publicKey, $secretKey);
// 使用私鑰解密訊息
$decryptedMessage = sodium_crypto_box_open($ciphertext, $nonce, $publicKey, $secretKey);
// 輸出結果
echo "加密後的訊息: " . base64_encode($ciphertext) . "\n";
echo "解密後的訊息: " . $decryptedMessage . "\n";
注意事項:
- 在使用 sodium_crypto_box() 函式之前,需要先生成公鑰和私鑰對。可以使用 sodium_crypto_box_keypair() 函式來生成金鑰對。
- 隨機生成 nonce 是非常重要的,因為 nonce 在同一個金鑰對下不能重複使用,否則會導致加密的安全性受損。
- sodium_crypto_box() 函式的返回值是二進位制字串,如果需要在文字環境下傳輸或儲存,可以使用 base64_encode() 函式進行編碼。
- 使用 sodium_crypto_box_open() 函式對加密後的訊息進行解密時,需要提供相同的 nonce、公鑰和私鑰。
- 如果解密失敗,sodium_crypto_box_open() 函式會返回 false。
- 為了確保安全性,建議使用最新的 PHP 版本,並且在使用 sodium_crypto_box() 函式時,確保所有引數的長度和格式都正確。