# openssl_encrypt

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

openssl_encrypt — Chiffre les données

### Description

openssl_encrypt(
#[\SensitiveParameter] string `$data`,
string `$cipher_algo`,
#[\SensitiveParameter] 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 phrase de passe 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é.

  Attention

  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.

### 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

Version | Description
--- | ---
7.1.0 | Les 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

- openssl_decrypt() - Déchiffrer les données