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() 的快速範例;您可以使用 1 個金鑰進行加密和解密。

<?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