2016-09-22 5 views
0

ich bin neu in PHP Crypto und ich benutze openssl Crypto-Operationen zu tun. Openssl Rsa ist PEM-Format benötigen, aber ich habe hexadezimalen Modul (n), privaten Exponenten (d) und öffentlichen Exponenten (e). Wie kann ich privaten Schlüssel von diesen Komponenten erzeugen? Und Entschuldigung für mein Englisch.Wie bekomme ich den privaten Schlüssel aus dem Exponenten, dem Modulus und dem privaten Exponenten in PHP?

+1

Sie haben einige Links zu Informationen, die Sie bereits als nützlich/geprüft angesehen haben? Bitte fügen Sie sie zu Ihrer Frage hinzu. –

+0

http://nmichaels.org/rsa.py Beispiel, oben Website erhält n, e, d-Komponenten und rsa Crypt-Operation. Bin neugierig, wie bekommt er/sie privaten Schlüssel zum Entschlüsseln von diesen 3 Komponenten? –

+0

@ MuhammedN.Kartal - Sie * können * Entschlüsselung mit nur n und d tun, aber es wird nicht so effizient wie es sein könnte, daher, warum * real-world * Implementierungen die zusätzlichen CRT-Parameter verwenden. Reale RSA-Implementierungen und Lehrbuch-RSA-Implementierungen machen verschiedene Dinge. Eine andere Sache, die Lehrbuch-RSA-Implementierungen nicht tun: Padding. Diese Lehrbuch-RSA-Implementierungen sind (unter anderem) bekannten Klartextangriffen unterworfen, ist im Klassenzimmer nicht wirklich ein Problem, da das Ziel im Unterricht darin besteht, Ihnen die/allgemeine/Idee zu geben. – neubert

Antwort

0

RSA private Schlüssel haben in der Regel auch eine Reihe anderer Parameter. Die Primzahlen, die verwendet wurden, um den Modulus (p und q) und andere Parameter zu erzeugen, um die Verwendung des chinesischen Restsatzes zu erleichtern, um die Entschlüsselung zu beschleunigen. Wenn Sie das nicht haben, dann würde ich einfach einen öffentlichen Schlüssel erstellen. Möglicherweise können Sie PUBLIC durch PRIVATE IDK ersetzen.

Wie auch immer, hier einige Code ist (verwendet phpseclib 1.0.3):

<?php 
include('Crypt/RSA.php'); 
include('Math/BigInteger.php'); 

$rsa = new Crypt_RSA(); 
$rsa->loadKey([ 
    'e' => new Math_BigInteger('...'), // base-10 by default 
    'n' => new Math_BigInteger('...') // base-10 by default 
]); 

echo $rsa; 

I 15 sowohl als e verwendet und n (die für RSA Zwecke nicht wirklich eine gültige Kombination ist aber für es ist in Ordnung Demozwecke) und bekam diese Rückseite:

-----BEGIN PUBLIC KEY----- 
MBowDQYJKoZIhvcNAQEBBQADCQAwBgIBDwIBDw== 
-----END PUBLIC KEY----- 
+0

Vielen Dank für Ihre Antwort. Ich habe diesen Code vorher, ich dachte, wie Sie, (http://nmichaels.org/rsa.py) , aber über Website tun RSA Enc/Dec mit nur 3 Komponenten. Irgendwie bekommt er/sie einen privaten Schlüssel aus hexadezimalen n, e, d Komponenten und entschlüsselt Daten mit ihnen. –

+0

@ MuhammedN.Kartal - Nun, wie ich schon sagte, Sie können BEGIN PUBLIC KEY einfach in BEGIN PRIVATE KEY umbenennen. http://stackoverflow.com/a/21289989/569976 diskutiert das private RSA-Schlüsselformat. Beachten Sie, dass die Primzahlen und CRT-Parameter nicht optional sind. Was optional ist, ist otherPrimeInfos, was für private RSA-Schlüssel mit mehr als zwei Primzahlen gilt. – neubert

+0

Ich lese das diskutieren über private Schlüsselformat. Danke vielmals. –

Verwandte Themen