sodium_crypto_box

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_box经过身份验证的公钥加密

描述

sodium_crypto_box(#[\SensitiveParameter] string $message, string $nonce, #[\SensitiveParameter] string $key_pair): string

使用非对称(公钥)加密来加密消息。

sodium_crypto_box() 为前缀的函数使用的算法是基于 Montgomery 曲线的椭圆曲线 Diffie-Hellman,即 Curve25519;通常简称为 X25519。

参数

message

要加密的消息。

nonce

每个消息只能使用一次的数字。长度为 24 字节。这是一个足够大的边界,可以随机生成(例如 random_bytes())。

key_pair

参见 sodium_crypto_box_keypair_from_secretkey_and_publickey()。这应该包含发送方的 X25519 私钥和接收方的 X25519 公钥。

返回值

返回加密的消息(密文加上认证标签)。密文将比明文长 16 字节,并且是一个原始二进制字符串。有关存储的安全的编码,请参见 sodium_bin2base64()

添加注释

用户贡献的注释 1 条注释

11
craig at craigfrancis dot co dot uk
6 年前
这是一个关于如何使用 sodium_crypto_box() 的快速示例;在其中两个人交换了一条 $message,其中第一个人对其进行加密,以便只有第二个人才能解密它,并且确保第一个人确实发送了它(没有被篡改)。

<?php

$keypair1
= sodium_crypto_box_keypair();
$keypair1_public = sodium_crypto_box_publickey($keypair1);
$keypair1_secret = sodium_crypto_box_secretkey($keypair1);

$keypair2 = sodium_crypto_box_keypair();
$keypair2_public = sodium_crypto_box_publickey($keypair2);
$keypair2_secret = sodium_crypto_box_secretkey($keypair2);

//--------------------------------------------------
// 第一个人,加密

$message = 'hello';

$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);

$encryption_key = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair1_secret, $keypair2_public);
$encrypted = sodium_crypto_box($message, $nonce, $encryption_key);

echo
base64_encode($encrypted) . "\n";

//--------------------------------------------------
// 第二个人,解密

$decryption_key = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair2_secret, $keypair1_public);
$decrypted = sodium_crypto_box_open($encrypted, $nonce, $decryption_key);

echo
$decrypted . "\n";

?>
To Top