(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_pkey_new — Erzeugt einen neuen privaten Schlüssel
openssl_pkey_new() erzeugt einen neuen privaten Schlüssel. Wie man den öffentlichen Teil des Schlüssels erhält, wird in einem Beispiel unten gezeigt.
Hinweis: Die ordnungsgemäße Ausführung dieser Funktion setzt die Installation einer gültigen openssl.cnf-Datei voraus. Mehr Information hierzu sind im Abschnitt Installation zu finden.
options
Die Schlüsselerzeugung kann mit options
feiner
abgestimmt werden (z. B. durch die Angabe der verwendeten Bits oder
Parameter).
Diese Optionen können entweder Algorithmus-spezifische Parameter sein,
die bei der Schlüsselerzeugung verwendet werden, oder generische
Optionen, die auch bei der Erzeugung eines CSR
verwendet werden, wenn sie nicht angegeben werden.
Weitere Informationen über die Verwendung von
options
für ein CSR sind der
Dokumentation zu openssl_csr_new() zu entnehmen.
Von diesen Optionen werden nur private_key_bits
,
private_key_type
, curve_name
, und
config
für die Schlüsselerzeugung verwendet.
Die Algorithmus-spezifischen Optionen werden verwendet, wenn das
assoziative Array einen der spezifischen Schlüssel enthält.
"rsa"
zur Einstellung der RSA-Parameter.
Optionen | Typ | Format | Erforderlich | Beschreibung |
---|---|---|---|---|
"n" |
string | Binärzahl | ja | Modul |
"e" |
string | Binärzahl | nein | öffentlicher Exponent |
"d" |
string | Binärzahl | ja | privater Exponent |
"p" |
string | Binärzahl | nein | Primzahl 1 |
"q" |
string | Binärzahl | nein | Primzahl 2 |
"dmp1" |
string | Binärzahl | nein | Exponent1, d mod (p-1) |
"dmq1" |
string | Binärzahl | nein | Exponent2, d mod (q-1) |
"iqmp" |
string | Binärzahl | nein | Koeffizient, (Inverse von q) mod p |
"dsa"
zur Einstellung der DSA-Parameter.
Optionen | Typ | Format | Erforderlich | Beschreibung |
---|---|---|---|---|
"p" |
string | Binärzahl | nein | Primzahl (öffentlich) |
"q" |
string | Binärzahl | nein | 160-Bit Unterprimzahl (Subprime), q | p-1 (öffentlich) |
"g" |
string | Binärzahl | nein | Generator der Untergruppe (öffentlich) |
"priv_key" |
string | PEM-Schlüssel | nein | privater Schlüssel x |
"pub_key" |
string | PEM-Schlüssel | nein | öffentlicher Schlüssel y = g^x |
"rsa"
zur Einstellung der RSA-Parameter.
Optionen | Typ | Format | Erforderlich | Beschreibung |
---|---|---|---|---|
"p" |
string | Binärzahl | nein | Primzahl (gemeinsam genutzt) |
"g" |
string | Binärzahl | nein | Generator von Z_p (gemeinsam genutzt) |
"priv_key" |
string | PEM-Schlüssel | nein | privater DH-Wert x |
"pub_key" |
string | PEM-Schlüssel | nein | öffentlicher DH-Wert g^x |
"ec"
für die Parameter der
elliptischen Kurve
Optionen | Typ | Format | Erforderlich | Beschreibung |
---|---|---|---|---|
"curve_name" |
string | Name | nein | Name der Kurve, siehe openssl_get_curve_names() |
"p" |
string | Binärzahl | nein | Primzahl des Feldes (mathematisch: Körpers) für die Kurve über Fp |
"a" |
string | Binärzahl | nein | Koeffizient a der Kurve für Fp: y^2 mod p = x^3 + ax + b mod p |
"b" |
string | Binärzahl | nein | Koeffizient b der Kurve für Fp: y^2 mod p = x^3 + ax + b mod p |
"seed" |
string | Binärzahl | nein | optionaler Zufallszahlen-Seed für die Generierung von Koeffizient b |
"generator" |
string | binär kodierter Punkt | nein | Generatorpunkt der Kurve |
"g_x" |
string | Binärzahl | nein | x-Koordinate des Generatorpunkts |
"g_y" |
string | Binärzahl | nein | y-Koordinate des Generatorpunkts |
"cofactor" |
string | Binärzahl | nein | Kurvenkoeffizient |
"order" |
string | Binärzahl | nein | Ordnung der Kurve |
"x" |
string | Binärzahl | nein | x-Koordinate (öffentlich) |
"y" |
string | Binärzahl | nein | y-Koordinate (öffentlich) |
"d" |
string | Binärzahl | nein | privater Schlüssel |
"x25519"
, "x448"
,
"ed25519"
und "ed448"
für die
Curve25519- und Curve448-Parameter.
Optionen | Typ | Format | Erforderlich | Beschreibung |
---|---|---|---|---|
"priv_key" |
string | PEM-Schlüssel | nein | privater Schlüssel |
"pub_key" |
string | PEM-Schlüssel | nein | öffentlicher Schlüssel |
Gibt bei Erfolg eine OpenSSLAsymmetricKey-Instanz
zurück oder false
, wenn ein Fehler auftritt.
Version | Beschreibung |
---|---|
8.4.0 |
Unterstützung für Schlüssel, die auf Curve25519 und Curve448 basieren,
wurde mit der Einführung der Felder x25519 ,
ed25519 , x448 und
ed448 hinzugefügt.
|
8.3.0 |
Unterstützung für die Generierung von EC-Schlüsseln mit
benutzerdefinierten EC-Parametern hinzugefügt.
Insbesondere mit der Einführung der EC-Optionen:
p , a , b ,
seed , generator ,
g_x , g_y ,
cofactor und order .
|
8.0.0 |
Bei Erfolg gibt diese Funktion nun eine
OpenSSLAsymmetricKey-Instanz zurück; vorher
wurde eine Ressource vom Typ OpenSSL-Schlüssel
zurückgegeben.
|
7.1.0 |
Der Parameter options wurde um den Schlüssel
curve_name erweitert, damit EC-Schlüssel basierend
auf Algorithmen für elliptische Kurven erzeugt werden können.
|
Beispiel #1 Aus einem privaten Schlüssel den öffentlichen Schlüssel gewinnen
<?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);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
// Ausgabe vor PHP 8.0.0; Hinweis: Die Funktion gibt eine Ressource zurück -----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) // Ausgabe seit PHP 8.0.0; Hinweis: Die Funktion gibt ein Objekt zurück -----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) { }
Beispiel #2 Erzeugen eines RSA-Schlüssels aus Parametern
<?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);
?>