(PHP 5 >= 5.3.0, PHP 7, PHP 8)
openssl_encrypt — Chiffre les données
$data,$cipher_algo,$passphrase,$options = 0,$iv = "",&$tag = null,$aad = "",$tag_length = 16Chiffre les données passées avec la méthode et la phrase de passe précisées. Retourne une chaîne de caractères brute ou encodée en base64.
dataLes données du message en texte brut à chiffrer.
cipher_algoLa méthode de cipher. Pour une liste des méthodes de cipher disponibles, utiliser openssl_get_cipher_methods().
passphrase
La passphrase. Si la passphrase est plus courte qu'attendu, elle est silencieusement
complétée avec des caractères NUL ; si la passphrase est plus longue
qu'attendu, elle est silencieusement tronquée.
Il n'y a pas de fonction de dérivation de clé utilisée pour le paramètre passphrase
comme son nom pourrait le suggérer. La seule opération utilisée est le remplissage avec des caractères
NUL ou la troncature si la longueur est différente de celle attendue.
options
options est une disjonction au niveau des bits des drapeaux
OPENSSL_RAW_DATA et
OPENSSL_ZERO_PADDING
ou OPENSSL_DONT_ZERO_PAD_KEY.
iv
Un vecteur d'initialisation non-null. Si le VI est plus court que prévu, il est complété par des
caractères NUL et un avertissement est émis ; si le VI est plus long
que prévu, il est tronqué et un avertissement est émis.
tagLe tag d'authentification passé par référence lors de l'utilisation du mode cipher AEAD (GCM ou CCM).
aadDonnées supplémentaires authentifiées.
tag_length
La longueur du tag d'authentification.
Sa valeur peut être entre 4 et 16 pour le mode GCM.
Retourne la chaîne chiffrée en cas de succès ou false si une erreur survient.
Émet une erreur de niveau E_WARNING si un algorithme cipher
inconnu est passé comme paramètre cipher_algo.
Émet une erreur de niveau E_WARNING si une valeur
vide est passée comme paramètre iv.
| Version | Description |
|---|---|
| 7.1.0 | Les paramètres tag, aad et tag_length ont été ajoutés. |
Exemple #1 Exemple de chiffrement authentifié AES en mode GCM pour PHP 7.1+
<?php
//$key devrait être généré précédemment d'une manière cryptographique, tel que openssl_random_pseudo_bytes
$plaintext = "message à chiffrer";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
//stocke $cipher, $iv, et $tag pour le déchiffrement ultérieur
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>Exemple #2 Exemple de chiffrement authentifié AES en mode GCM antérieur à PHP 7.1
<?php
//$key devrait être généré précédemment d'une manière cryptographique, tel que openssl_random_pseudo_bytes
$plaintext = "message à chiffrer";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
// déchiffrer plus tard ...
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
if (hash_equals($hmac, $calcmac))// timing attack safe comparison
{
echo $original_plaintext."\n";
}
?>