Chiffre les données

# openssl_encrypt

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

openssl_encrypt — Chiffre les données

### Description

function 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ée 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 disponibles, utiliser openssl_get_cipher_methods().

`passphrase`

  La passphrase. Si la passphrase est plus courte qu'attendu, elle est silencieusement complétée avec des caractères `NUL` ; si la passphrase est plus longue qu'attendu, elle est silencieusement tronquée.

  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 le VI est plus long que prévu, il est tronqué 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 chaîne 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ée 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 à chiffrer";
    $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);
        //stocke $cipher, $iv, et $tag pour le déchiffrement ultérieur
        $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 à chiffrer";
    $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échiffre les données

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open