(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.
data
Les données du message en texte brut à chiffrer.
cipher_algo
La 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.
tag
Le tag d'authentification passé par référence lors de l'utilisation du mode cipher AEAD (GCM ou CCM).
aad
Donné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";
}
?>