sodium_crypto_box()
使用公钥加密和私钥解密数据,基于 X25519 密钥交换和 XSalsa20-Poly1305 加密算法
函数名: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() 函数时,确保所有参数的长度和格式都正确。