sodium_crypto_aead_chacha20poly1305_ietf_encrypt

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_aead_chacha20poly1305_ietf_encrypt加密消息

描述

sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
    #[\SensitiveParameter] string $message,
    string $additional_data,
    string $nonce,
    #[\SensitiveParameter] string $key
): string

使用 ChaCha20-Poly1305(IETF 变体)先加密再认证。

IETF 变体使用 96 位 nonce 和 32 位内部计数器,而不是两者都使用 64 位。

参数

message

要加密的明文消息。

additional_data

附加的认证数据。这用于验证附加到密文的认证标记,但它不会被加密或存储在密文中。

nonce

每个消息只能使用一次的数字。12 字节长。

key

加密密钥(256 位)。

返回值

如果成功,则返回密文和标记,如果失败,则返回 **false**。

添加备注

用户贡献的备注 1 条备注

craig at craigfrancis dot co dot uk
6 年前
这是一个关于如何使用 sodium_crypto_aead_chacha20poly1305_ietf_encrypt() 的快速示例;其中你有一个密钥用于加密和解密。

<?php

$key
= sodium_crypto_aead_chacha20poly1305_ietf_keygen();

//--------------------------------------------------
// 加密

$message = 'hello';

$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);

$encrypted = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($message, $nonce, $nonce, $key);

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

//--------------------------------------------------
// 解密

$decrypted = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($encrypted, $nonce, $nonce, $key);

echo
$decrypted . "\n";

?>

并且,为了确认,$nonce 被使用了两次 - 第一次是在认证标记 ($ad) 中

https://twitter.com/craigfrancis/status/949614546259513344
To Top