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] string $message,
    string $additional_data,
    string $nonce,
    #[\SensitiveParameter] string $key
): string

使用 ChaCha20-Poly1305 加密然後驗證。

參數

message

要加密的明文訊息。

additional_data

額外的經過身份驗證的資料。這用於驗證附加到密文的驗證標籤,但它不會被加密或儲存在密文中。

nonce

每個訊息只能使用一次的數字。長度為 8 個位元組。

key

加密金鑰 (256 位元)。

回傳值

成功時回傳密文和標籤,失敗時回傳 false

新增註解

使用者貢獻的註解 1 則註解

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