(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_aead_chacha20poly1305_ietf_encrypt — メッセージを暗号化する
$message
,$additional_data
,$nonce
,$key
ChaCha20-Poly1305 を使って暗号化し、認証を行います。 (IETF バリアントです)
IETF バリアントは、96ビットの nonce と 32ビットの内部カウンタを持ちます。 標準では、nonce, 内部カウンタともに64ビットです。
message
暗号化するプレーンテキスト
additional_data
追加の認証データ。 これは、 暗号化されたテキストに追加された認証タグを検証するのに用いられますが、 このデータは暗号化されていませんし、 暗号化されたテキストにも保存されません。
nonce
メッセージごとに一度だけ使われる数値。 長さは12バイトです。
key
暗号化キー(256ビット)
成功時には、
暗号化されたテキストと認証タグを返します。
失敗した場合に false
を返します.
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