Konvertieren öffentlichen RSA-Schlüssel von XML nach PEM (PHP)
Wie konvertieren öffentlichen RSA-Schlüssel von XML nach PEM (PHP)?
Was meinst du mit "XML", meinst du aus einem Dokument mit Hilfe von XML-Signaturen: en.wikipedia.org/wiki/XML_Signature
InformationsquelleAutor slamer | 2010-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
wissen wir
X. 509
XML_Signature
so dass wir am Ende mit
wenn Ihre xml-Datei nicht in eine XML_Signature
da haben wir keine Informationen über die geheimnisvolle xml... siehe es als Beispiel. ändern Sie den code entsprechend, dass mehr klar
Sicher, aber wenn es die RSAKeyValue XML-DSig-format, die Sie noch benötigen, um zu rekonstruieren, der ASN.1 Struktur und re-Encoden in base-64, bevor Sie es in zwischen BEGIN/END PUBLIC KEY. Es geht nicht nur darum, extrahieren Sie den text aus der XML. @mario der Zeiger würde dann helfen.
ich versuche immer, "denke einfach" wenn es keine klare definition gibt. aber natürlich ist das Ihr gutes Recht.
InformationsquelleAutor teemitzitrone
Gehe ich davon aus, dass durch das XML-format, du meinst XML-DSig RSAKeyValue, und dass durch die PEM-format, du meinst, was OpenSSL Exporte zwischen
-----BEGIN PUBLIC KEY-----
und-----END PUBLIC KEY-----
.Müssen Sie zum extrahieren der E-Modul und dem öffentlichen Exponenten aus der XML.
Können Sie ganz einfach konvertieren Sie diese in ein bit-string mit
base64_decode
.Sobald dies erledigt ist, werden Sie brauchen, um zu bauen die ASN.1 public-key-Struktur irgendwie.
Was OpenSSL Exporte zwischen BEGIN/END PUBLIC KEY ist ein X. 509-Struktur SubjectPublicKeyInfo.
Den
subjectPublicKey
ist aus einem sequnce ist beschrieben in der PKCS#1 spec:Den
algorithm
(AlgorithmIdentifier
) ist auch beschrieben in den PKCS#1-spec (siehe Abschnitt A. 1):Diese Struktur muss serialisiert werden, in DER form, dann base64-codiert und anschließend zwischen BEGIN/END-Trennzeichen.
Ich kenne keine PHP-Bibliothek zu tun, die ASN.1/DER-Codierung leider (der rest ist relativ einfach, aber der Umgang mit ASN.1 eher mühsam).
Den PHP/PEAR Crypt_RSA Modul konstruieren kann öffentlichen RSA-Schlüssel von modulus und exponent, aber seine
toString()
Methode verwendet ein benutzerdefiniertes format (nur den base64-Codierung das Ergebnis der PHP -serialize
auf die array-Struktur, die hat nichts zu tun mit der ASN.1/DER-Kodierung).InformationsquelleAutor Bruno
Gibt es keinen standard für die Speicherung von RSA-public keys in XML. Also die Art und Weise der Umwandlung hängt von der XML, die Sie haben.
Post eine Antwort!
OK, ich habe gerade das getan.
InformationsquelleAutor Borealid
Hier ist ein Beispiel wie: Lesen von XML-RSA-Schlüssel in PHP:
InformationsquelleAutor fruzer
Nur der Vollständigkeit halber, hier ist ein funktionierendes Beispiel für das erstellen der PEM-aus-Modul in python. Man könnte es in einen Teilprozess von PHP, wenn nötig.
Das Fleisch, die Lösung ist:
Wo
E_PREFIX
undN_PREFIX
sind Konstanten, die (soweit ich das sagen kann) hängt der exponent und die Schlüssellänge. Hier ist eine kurze Tabelle, die ich konstruiert haben:Wenn jemand weiß, einen Allgemeinen Weg, um zu berechnen, Präfixe, sagen Sie.
InformationsquelleAutor rsanden
Vielleicht sollten Sie einen Blick hier
Extrahieren Sie die beiden base64-codierte strings konvertieren und pass auf PEAR::Crypt_RSA, dann export als text-Datei, dann openssl konvertieren?
Prüfen
InformationsquelleAutor mario