(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_pkey_new — Génère une nouvelle clé privée
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.
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.
"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 |
"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 |
"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 |
"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 |
"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 |
Retourne une instance de OpenSSLAsymmetricKey en cas de succès, false
en cas d'erreur.
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.
|
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);
?>