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
string
string
#[\SensitiveParameter] string
): string
#[\SensitiveParameter] string
$message
,string
$additional_data
,string
$nonce
,#[\SensitiveParameter] string
$key
): string
ChaCha20-Poly1305 を使って暗号化し、認証を行います。 (IETF バリアントです)
IETF バリアントは、96ビットの nonce と 32ビットの内部カウンタを持ちます。 標準では、nonce, 内部カウンタともに64ビットです。
パラメータ
message
-
暗号化するプレーンテキスト
additional_data
-
追加の認証データ。 これは、 暗号化されたテキストに追加された認証タグを検証するのに用いられますが、 このデータは暗号化されていませんし、 暗号化されたテキストにも保存されません。
nonce
-
メッセージごとに一度だけ使われる数値。 長さは12バイトです。
key
-
暗号化キー(256ビット)
戻り値
成功時には、
暗号化されたテキストと認証タグを返します。
失敗した場合に false
を返します.
+add a note
User Contributed Notes 1 note
craig at craigfrancis dot co dot uk ¶
6 years ago
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