openssl_encrypt
(PHP 5 >= 5.3.0, PHP 7)
openssl_encrypt — Chiffre les données
Description
$data
, string $method
, string $key
[, int $options
= 0
[, string $iv
= ""
[, string &$tag
= NULL
[, string $aad
= ""
[, int $tag_length
= 16
]]]]] ) : stringChiffre 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.
Liste de paramètres
-
data
-
Les données du message en texte brut à chiffrer.
-
method
-
La méthode de cipher. Pour une liste des méthodes de cipher disponible, utiliser openssl_get_cipher_methods().
-
key
-
La clé.
-
options
-
options
est une disjonction au niveau des bits des drapeauxOPENSSL_RAW_DATA
etOPENSSL_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 additionel d'authentification.
-
tag_length
-
La longeur du
tag
d'authentification. Sa valeur peut être entre 4 et 16 pour le mode GCM.
Erreurs / Exceptions
Émet une erreur de niveau E_WARNING
si un algorithme cipher
inconnu est passé comme paramètre method
.
Émet une erreur de niveau E_WARNING
si une valeur
vide est passé comme paramètre iv
.
Historique
Version | Description |
---|---|
7.1.0 | Les paramètres tag , aad et tag_length ont été ajoutés. |
5.4.0 |
Le paramètre raw_output
a été changé en options .
|
5.3.3 |
Le paramètre iv a été ajouté.
|
Exemples
Exemple #1 Exemple de chiffrement authentifié AES en mode GCM pour PHP 7.1+
<?php
//$key devrait être généré précédement 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 pour PHP 5.6+
<?php
//$key devrait être généré précédement 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échifrrer 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))//PHP 5.6+ timing attack safe comparison
{
echo $original_plaintext."\n";
}
?>
Version en cache
26/11/2024 07:18:56 Cette version de la page est en cache (à la date du 26/11/2024 07:18:56) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-openssl-encrypt.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.