函数名称:sodium_crypto_secretbox()
适用版本:PHP 7.2.0及以上版本
函数描述:sodium_crypto_secretbox()函数用于对消息进行加密,并生成一个密文。它使用Xsalsa20和Poly1305算法,提供了高级加密功能。
语法:sodium_crypto_secretbox(string $message, string $nonce, string $key): string|false
参数:
- $message:要加密的消息,必须是一个字符串。
- $nonce:一个随机的24字节字符串,用于生成唯一的密文。必须确保每次加密使用的$nonce都是唯一的。
- $key:一个32字节的密钥字符串,用于加密和解密消息。
返回值:
- 如果加密成功,返回一个加密后的密文字符串。
- 如果加密失败,返回false。
示例:
// 生成随机的24字节nonce
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// 生成32字节的密钥
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
// 要加密的消息
$message = "Hello, world!";
// 加密消息
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
// 解密密文
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
// 输出加密后的密文和解密后的明文
echo "Ciphertext: " . base64_encode($ciphertext) . "\n";
echo "Decrypted: " . $decrypted . "\n";
注意事项:
- 每次加密都需要使用一个唯一的$nonce,否则会导致安全性问题,因此应确保生成的$nonce是随机且唯一的。
- 密钥$key应该是一个随机生成的字符串,并且在加密和解密过程中保持不变。
- 加密后的密文是一个二进制字符串,可以使用base64_encode()函数进行编码以便于传输或存储。
- 解密密文时,需要使用相同的$nonce和$key才能成功解密并还原原始消息。