查询

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() 函数时,确保所有参数的长度和格式都正确。
补充纠错
热门PHP函数
分享链接