openssl_encrypt

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

openssl_encryptChiffre les données

Description

openssl_encrypt(
    string$data,
    string$cipher_algo,
    string$passphrase,
    int$options = 0,
    string$iv = "",
    string&$tag = null,
    string$aad = "",
    int$tag_length = 16
): string|false

Chiffre 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.

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.

Valeurs de retour

Retourne la chaine chiffrée en cas de succès ou false si une erreur survient.

Erreurs / Exceptions

É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.

Historique

VersionDescription
7.1.0Les paramètres tag, aad et tag_length ont été ajoutés.

Exemples

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";
}
?>

Voir aussi

To Top