sodium_crypto_box_seal

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_box_seal匿名公钥加密

描述

sodium_crypto_box_seal(#[\SensitiveParameter] string $message, string $public_key): string

加密消息,以便只有接收者才能解密。

sodium_crypto_box() 不同,您只需要知道接收者的公钥即可使用 sodium_crypto_box_seal()。但是,这种方便的一个后果是,密文没有绑定到静态公钥,因此没有经过身份验证。因此,匿名公钥加密。

sodium_crypto_box_seal() 仍然提供密文完整性。只是没有发送方身份验证。

如果您还需要发送方身份验证,sodium_crypto_sign() 函数可能是最佳起点。

参数

message

要加密的消息。

public_key

与唯一可以解密消息的密钥相对应的公钥。

返回值

密文字符串,格式为 (一次性公钥、加密消息、身份验证标签)。

示例

示例 #1 sodium_crypto_box_seal() 示例

<?php
$keypair
= sodium_crypto_box_keypair();
$public_key = sodium_crypto_box_publickey($keypair);

// 为了使示例更有趣,对明文进行了混淆
$plaintext_b64 = "V3JpdGluZyBzb2Z0d2FyZSBpbiBQSFAgY2FuIGJlIGEgZGVsaWdodCE=";
$decoded_plaintext = sodium_base642bin($plaintext_b64, SODIUM_BASE64_VARIANT_ORIGINAL);

$sealed = sodium_crypto_box_seal($decoded_plaintext, $public_key);
var_dump(base64_encode($sealed));

$opened = sodium_crypto_box_seal_open($sealed, $keypair);
var_dump($opened);
?>

上面的示例将输出类似于以下内容

string(120) "oRBXXAV4iQBrxlV4A21Bord8Yo/D8ZlrIIGNyaRCcGBfpz0map52I3xq6l+CST+1NSgQkbV+HiYyFjXWiWiaCGupGf+zl4bgWj/A9Adtem7Jt3h3emrMsLw="
string(41) "Writing software in PHP can be a delight!"
添加注释

用户贡献的注释 1 条注释

craig at craigfrancis dot co dot uk
6 年前
这是一个关于如何使用 sodium_crypto_box_seal(); 的快速示例,其中两个人交换一条 $message - 第一个人对其进行加密,以便只有第二个人才能解密。它不允许第二个人知道是谁发送的,因为只使用了他们的公钥(请参阅 sodium_crypto_box 以实现此目的)。

<?php

$keypair
= sodium_crypto_box_keypair();
$keypair_public = sodium_crypto_box_publickey($keypair);
$keypair_secret = sodium_crypto_box_secretkey($keypair);

// $key_public = sodium_crypto_box_publickey_from_secretkey($keypair_secret);
// $keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair_secret, $key_public);

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

$message = 'hello';

$encrypted = sodium_crypto_box_seal($message, $keypair_public);

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

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

$decrypted = sodium_crypto_box_seal_open($encrypted, $keypair);

echo
$decrypted . "\n";

?>
To Top