openssl_pkey_new

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

openssl_pkey_newErzeugt einen neuen privaten Schlüssel

Beschreibung

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

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.

Parameter-Liste

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.

  • Der Schlüssel "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
  • Der Schlüssel "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
  • Der Schlüssel "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
  • Der Schlüssel "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
  • Die 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

Rückgabewerte

Gibt bei Erfolg eine OpenSSLAsymmetricKey-Instanz zurück oder false, wenn ein Fehler auftritt.

Changelog

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.

Beispiele

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);

?>