sodium_crypto_aead_chacha20poly1305_ietf_encrypt
(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_aead_chacha20poly1305_ietf_encrypt — Encrypt a message
说明
string
$message
,string
$additional_data
,string
$nonce
,string
$key
): string
Encrypt then authenticate with ChaCha20-Poly1305 (IETF variant).
The IETF variant uses 96-bit nonces and 32-bit internal counters, instead of 64-bit for both.
参数
-
message
-
The plaintext message to encrypt.
-
additional_data
-
Additional, authenticated data. This is used in the verification of the authentication tag appended to the ciphertext, but it is not encrypted or stored in the ciphertext.
-
nonce
-
A number that must be only used once, per message. 12 bytes long.
-
key
-
Encryption key (256-bit).
返回值
Returns the ciphertext and tag on success, 或者在失败时返回 false
.

User Contributed Notes 1 note
Here's a quick example on how to use sodium_crypto_aead_chacha20poly1305_ietf_encrypt(); where you have 1 key to encrypt and decrypt.
<?php
$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
//--------------------------------------------------
// Encrypting
$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";
//--------------------------------------------------
// Decrypting
$decrypted = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($encrypted, $nonce, $nonce, $key);
echo $decrypted . "\n";
?>
And just to confirm, the $nonce is used twice - the first time it's in the authentication tag ($ad):
https://twitter.com/craigfrancis/status/949614546259513344
备份地址:http://www.lvesu.com/blog/php/function.sodium-crypto-aead-chacha20poly1305-ietf-encrypt.php