(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 clé 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é.
options
options
est une disjonction au niveau des bits des drapeaux
OPENSSL_RAW_DATA
et
OPENSSL_ZERO_PADDING
.
iv
Un vecteur d'initialisation non-nul.
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";
}
?>