PHP Conference Japan 2024

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 条注释

3
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