openssl_pkey_new

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

openssl_pkey_newGénère une nouvelle clé privée

Description

openssl_pkey_new(?array $options = null): OpenSSLAsymmetricKey|false

openssl_pkey_new() génère une nouvelle clé privée. Comment obtenir le composant publique de la clé est démontré dans un exemple ci-dessous.

Note: Vous devez avoir un fichier openssl.cnf valide et installé pour que cette fonction opère correctement. Voir les notes se trouvant dans la section concernant l'installation pour plus d'informations.

Liste de paramètres

options

Il est possible d'affiner la génération de clés (par exemple, en spécifiant le nombre de bits ou les paramètres) à l'aide du paramètre options. Ces options peuvent soit être des paramètres spécifiques à l'algorithme utilisés pour la génération de clés, soit des options génériques également utilisées pour la génération de CSR si non spécifiées. Consultez openssl_csr_new() pour plus d'informations sur l'utilisation de options pour un CSR. Parmi ces options, seules private_key_bits, private_key_type, curve_name, et config sont utilisées pour la génération de clés. Les options spécifiques à un algorithme sont utilisées si le tableau associatif inclut l'une des clés spécifiques.

  • Clé "rsa" pour définir les paramètres RSA.
    options type format requis description
    "n" string nombre binaire oui modulus
    "e" string nombre binaire non exposant public
    "d" string nombre binaire oui exposant privé
    "p" string nombre binaire non premier 1
    "q" string nombre binaire non premier 2
    "dmp1" string nombre binaire non exponent1, d mod (p-1)
    "dmq1" string nombre binaire non exponent2, d mod (q-1)
    "iqmp" string nombre binaire non coefficient, (inverse de q) mod p
  • Clé "dsa" pour définir les paramètres DSA.
    options type format requis description
    "p" string nombre binaire non nombre premier (public)
    "q" string nombre binaire non 160 bits sous-prime, q | p-1 (public)
    "g" string nombre binaire non générateur du sous-groupe (public)
    "priv_key" string clé PEM non clé privée x
    "pub_key" string clé PEM non clé publique y = g^x
  • Clé "dh" pour les paramètres DH (échange de clés Diffie–Hellman).
    Options Type Format Requis Description
    "p" string nombre binaire non nombre premier (partagé)
    "g" string nombre binaire non générateur de Z_p (partagé)
    "priv_key" string clé PEM non valeur DH privée x
    "pub_key" string clé PEM non valeur DH publique g^x
  • Clé "ec" pour les paramètres de courbe elliptique
    Options Type Format Requis Description
    "curve_name" string nom non nom de la courbe, voir openssl_get_curve_names()
    "p" string nombre binaire non nombre premier du champ pour la courbe sur Fp
    "a" string nombre binaire non coefficient a de la courbe pour Fp : y^2 mod p = x^3 + ax + b mod p
    "b" string nombre binaire non coefficient b de la courbe pour Fp : y^2 mod p = x^3 + ax + b mod p
    "seed" string nombre binaire non nombre aléatoire facultatif utilisé pour générer le coefficient b
    "generator" string point encodé en binaire non point générateur de la courbe
    "g_x" string nombre binaire non coordonnée x du point générateur de la courbe
    "g_y" string nombre binaire non coordonnée y du point générateur de la courbe
    "cofactor" string nombre binaire non cofacteur de la courbe
    "order" string nombre binaire non ordre de la courbe
    "x" string nombre binaire non coordonnée x (publique)
    "y" string nombre binaire non coordonnée y (publique)
    "d" string nombre binaire non clé privée
  • Clés "x25519", "x448", "ed25519", "ed448" pour les paramètres Curve25519 et Curve448.
    Options Type Format Requis Description
    "priv_key" string clé PEM non clé privée
    "pub_key" string clé PEM non clé publique

Valeurs de retour

Retourne une instance de OpenSSLAsymmetricKey en cas de succès, false en cas d'erreur.

Historique

Version Description
8.4.0 Ajout de la prise en charge des clés basées sur Curve25519 et Curve448 avec l'introduction des champs x25519, ed25519, x448, et ed448.
8.3.0 Ajout de la prise en charge de la génération de clés EC avec des paramètres EC personnalisés. Plus précisément, avec l'introduction des options EC : p, a, b, seed, generator, g_x, g_y, cofactor, et order.
8.0.0 En cas de succès, cette fonction retourne désormais une instance de OpenSSLAsymmetricKey ; auparavant, une resource de type OpenSSL key était retournée.
7.1.0 L'option curve_name a été ajouté pour permettre la création de clés EC.

Exemples

Exemple #1 Obtain the public key from a private key

<?php

$private_key
= openssl_pkey_new();
$public_key_pem = openssl_pkey_get_details($private_key)['key'];
echo
$public_key_pem, PHP_EOL;

$public_key = openssl_pkey_get_public($public_key_pem);
var_dump($public_key);

?>

Résultat de l'exemple ci-dessus est similaire à :

// Résultat avant PHP 8.0.0 ; notez que la fonction retourne une ressource
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwknBFEherZe74BiRjTFA
hqwZ1SK7brwq7C/afnLXKhRR7jnrpfM0ypC46q8xz5UZswenZakJ7kd5fls+r4Bv
3P8XsKYLTh2m1GiWQhV1g77cNIN4qNWh70PiDO3fB2446o1LBgToQYuRZS5YQRfJ
rVD0ysgtVcCU9tjaey28HlgApOpYFTaaKPj2MBmEYpMC+kG2HhL12GfpHUi2eiXI
dXT2WskWHWvUrmQ7fJIfI92JlDokV62DH/q1oiedLs9OPNb0rL1aAmYdzaVN6XNH
x/o4Lh125v2vAPV9E3fZCDc/HDEUaahpjanMiCQEgEDp5Hr+CRkvERT5/ydN+p08
5wIDAQAB
-----END PUBLIC KEY-----
resource(6) of type (OpenSSL key)

// Résultat à partir de PHP 8.0.0 ; notez que la fonction retourne un objet
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwknBFEherZe74BiRjTFA
hqwZ1SK7brwq7C/afnLXKhRR7jnrpfM0ypC46q8xz5UZswenZakJ7kd5fls+r4Bv
3P8XsKYLTh2m1GiWQhV1g77cNIN4qNWh70PiDO3fB2446o1LBgToQYuRZS5YQRfJ
rVD0ysgtVcCU9tjaey28HlgApOpYFTaaKPj2MBmEYpMC+kG2HhL12GfpHUi2eiXI
dXT2WskWHWvUrmQ7fJIfI92JlDokV62DH/q1oiedLs9OPNb0rL1aAmYdzaVN6XNH
x/o4Lh125v2vAPV9E3fZCDc/HDEUaahpjanMiCQEgEDp5Hr+CRkvERT5/ydN+p08
5wIDAQAB
-----END PUBLIC KEY-----

object(OpenSSLAsymmetricKey)#2 (0) {
}

Exemple #2 Génération d'une clé RSA à partir de paramètres

<?php

$nhex
= "BBF82F090682CE9C2338AC2B9DA871F7368D07EED41043A440D6B6F07454F51F" .
"B8DFBAAF035C02AB61EA48CEEB6FCD4876ED520D60E1EC4619719D8A5B8B807F" .
"AFB8E0A3DFC737723EE6B4B7D93A2584EE6A649D060953748834B2454598394E" .
"E0AAB12D7B61A51F527A9A41F6C1687FE2537298CA2A8F5946F8E5FD091DBDCB";

$ehex = "11";
$dhex = "A5DAFC5341FAF289C4B988DB30C1CDF83F31251E0668B42784813801579641B2" .
"9410B3C7998D6BC465745E5C392669D6870DA2C082A939E37FDCB82EC93EDAC9" .
"7FF3AD5950ACCFBC111C76F1A9529444E56AAF68C56C092CD38DC3BEF5D20A93" .
"9926ED4F74A13EDDFBE1A1CECC4894AF9428C2B7B8883FE4463A4BC85B1CB3C1";

$phex = "EECFAE81B1B9B3C908810B10A1B5600199EB9F44AEF4FDA493B81A9E3D84F632" .
"124EF0236E5D1E3B7E28FAE7AA040A2D5B252176459D1F397541BA2A58FB6599";

$qhex = "C97FB1F027F453F6341233EAAAD1D9353F6C42D08866B1D05A0F2035028B9D86" .
"9840B41666B42E92EA0DA3B43204B5CFCE3352524D0416A5A441E700AF461503";

$dphex = "11";
$dqhex = "11";
$qinvhex = "b06c4fdabb6301198d265bdbae9423b380f271f73453885093077fcd39e2119f" .
"c98632154f5883b167a967bf402b4e9e2e0f9656e698ea3666edfb25798039f7";

$rsa= openssl_pkey_new([
'rsa' => [
'n' => hex2bin($nhex),
'e' => hex2bin($ehex),
'd' => hex2bin($dhex),
'p' => hex2bin($phex),
'q' => hex2bin($qhex),
'dmp1' => hex2bin($dphex),
'dmq1' => hex2bin($dqhex),
'iqmp' => hex2bin($qinvhex),
],
]);
$details = openssl_pkey_get_details($rsa);
var_dump($details);

?>