openssl_seal

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

openssl_sealScelle des données

Description

openssl_seal(
    #[\SensitiveParameter] string $data,
    string &$sealed_data,
    array &$encrypted_keys,
    array $public_key,
    string $cipher_algo,
    string &$iv = null
): int|false

La openssl_seal() scelle (chiffre) data en utilisant le cipher_algo spécifié avec une clé secrète générée aléatoirement. La clé est ensuite chiffrée avec chacune des clés publiques dans le tableau public_key, et chaque clé d'enveloppe chiffrée est retournée dans encrypted_keys. Cela permet d'envoyer des données scellées à plusieurs destinataires (à condition que leurs clés publiques soient disponibles). Chaque destinataire doit recevoir à la fois les données scellées et la clé d'enveloppe qui a été chiffrée avec la clé publique du destinataire. Le VI (vecteur d'initialisation) est généré, et sa valeur est retournée dans iv.

Liste de paramètres

data

Les données à sceller

sealed_data

Les données scellées.

encrypted_keys

Tableau des clés chiffrées.

public_key

Tableau d'instances OpenSSLAsymmetricKey contenant les clés publiques.

cipher_algo

La méthode de chiffrement.

Attention

La valeur par défaut pour les versions de PHP antérieures à 8.0 est ('RC4'), qui est considérée comme non sécurisée. Il est fortement recommandé de spécifier explicitement une méthode de chiffrement sécurisée.

iv

Le vecteur d'initialisation pour le déchiffrement de data. Il est requis si la méthode de chiffrement nécessite un VI. Cela peut être déterminé en appelant openssl_cipher_iv_length() avec cipher_algo.

Attention

Le VI ne peut pas être défini explicitement. Toute valeur qui y est définie est écrasée par une valeur générée aléatoirement.

Valeurs de retour

Retourne la longueur des données scellées en cas de succès, et false sinon. En cas de succès, les données scellées sont placées dans le paramètre sealed_data, et les clés d'enveloppe dans encrypted_keys.

Historique

Version Description
8.0.0 public_key accepte désormais un tableau d'instance de OpenSSLAsymmetricKey ; auparavant, un tableau de resources de type OpenSSL key était acceptée.
8.0.0 cipher_algo n'est désormais plus un paramètre optionnel.
8.0.0 iv est désormais nullable.

Exemples

Exemple #1 Exemple avec openssl_seal()

<?php

$data
= "test";

// récupérer les clés publiques
$pk1 = openssl_get_publickey("file://cert1.pem");
$pk2 = openssl_get_publickey("file://cert2.pem");


// scelle le message : seuls, les possesseurs de $pk1 et $pk2 peuvent déchiffrer
// le message $sealed avec les clés $ekeys[0] et $ekeys[1] (respectivement).
openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2));

if (
openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2), 'AES256', $iv) > 0) {
// éventuellement stocker les valeurs $sealed et $iv et les utiliser plus tard dans openssl_open
echo "succès\n";
}
?>

Voir aussi