(PHP 8 >= 8.2.0)
sodium_crypto_stream_xchacha20_xor_ic — Chiffre un message en utilisant un nonce et une clé secrète (sans authentification)
$message,$nonce,$counter,$keyCette fonction est similaire à sodium_crypto_stream_xchacha20_xor() mais ajoute la possibilité de définir la valeur initiale du compteur de blocs à une valeur non nulle. Cela permet d'accéder directement à n'importe quel bloc sans avoir à calculer les précédents.
Ce chiffrement est non authentifié, et ne prévient pas les attaques par texte chiffré choisi. Il faut s'assurer de combiner le texte chiffré avec un code d'authentification de message, par exemple avec la fonction sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(), ou sodium_crypto_auth().
messagenoncecounterkey
Le texte chiffré, ou ou false si une erreur survient.
Exemple #1 Exemple de sodium_crypto_stream_xchacha20_xor_ic()
<?php
$n2 = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES);
$left = str_repeat("\x01", 64);
$right = str_repeat("\xfe", 64);
// Tout en une fois :
$stream7_unified = sodium_crypto_stream_xchacha20_xor($left . $right, $n2, $key);
// Par morceaux, avec un compteur initial :
$stream7_left = sodium_crypto_stream_xchacha20_xor_ic($left, $n2, 0, $key);
$stream7_right = sodium_crypto_stream_xchacha20_xor_ic($right, $n2, 1, $key);
$stream7_concat = $stream7_left . $stream7_right;
var_dump(strlen($stream7_concat));
var_dump($stream7_unified === $stream7_concat);
?>Résultat de l'exemple ci-dessus est similaire à :
int(128) bool(true)