(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é 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 disponible, utiliser openssl_get_cipher_methods().
passphrase
La passphrase. Si la passphrase est plus courte qu'attendu, elle est silencieusement
capitonné avec des caractères NUL; si la passphrase est plus longue
qu'attendu, elle est silencieusement tronqué.
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 la phrase secrète est plus longue
que prévu, elle est tronquée 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 chaine 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é 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 to be encrypted";
$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);
//store $cipher, $iv, and $tag for decryption later
$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 to be encrypted";
$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";
}
?>