PHP Conference Japan 2024

sodium_crypto_aead_chacha20poly1305_encrypt

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_aead_chacha20poly1305_encrypt使用 ChaCha20-Poly1305 进行加密然后认证

描述

sodium_crypto_aead_chacha20poly1305_encrypt(
    #[\SensitiveParameter] 字符串 $message,
    字符串 $additional_data,
    字符串 $nonce,
    #[\SensitiveParameter] 字符串 $key
): 字符串

使用 ChaCha20-Poly1305 进行加密然后认证。

参数

message

要加密的明文消息。

additional_data

附加的、经过身份验证的数据。这用于验证附加到密文的认证标签,但它不会被加密或存储在密文中。

nonce

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

key

加密密钥 (256 位)。

返回值

成功时返回密文和标签,失败时返回 false

添加注释

用户贡献的注释 1 条注释

alain at fuz dot org
1 年前
一个翻转/触发单元测试,为您提供示例

<?php

use PHPUnit\Framework\TestCase;

class
SodiumTest extends TestCase
{
public function
testSodium()
{
// 或 32 个密码安全字节
// 将密钥与应用程序中的其他秘密安全地存储
$key = sodium_crypto_aead_xchacha20poly1305_ietf_keygen();

// 8 字节的 nonce 应与密文一起存储(解密时需要)
// 它不敏感,您只需将其预先添加到密文之前。
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES);

$flip = 'Hello, world!';
$ciphertext = sodium_crypto_aead_chacha20poly1305_encrypt($flip, $nonce, $nonce, $key);
$flop = sodium_crypto_aead_chacha20poly1305_decrypt($ciphertext, $nonce, $nonce, $key);

$this->assertEquals($flip, $flop);
}
}

?>

旁注:此测试中 nonce 使用了两次,但您可以在 `$additional_data` 中使用用户名、标识符或任何您喜欢的其他内容
To Top