wie konvertieren von raw-Modul & exponent, RSA-public-key - (.pem-format)
Ich habe das Modul & exponent eines RSA-public-key-eingebettet in eine Binär-Datei, und ich bin versucht, extrahieren Sie die gesamte blob und erstellen Sie eine nutzbare .pem-public-key.
Derzeit bin ich extrahieren die volle 260 bytes (4 Byte für den Exponenten, 256 Byte für den E-Modul)
und die Kodierung base64. Ich mache das mit dem folgenden shell-Befehl :
tail -c $((filesize - start_of_key_data)) filename | head -c $size_of_key_data | base64 > outkey
Das gibt mir die folgende Zeichenfolge :
<<<<<< modulus & exponent extracted from binary file, base64-encoded >>>>>>
tZyrQA6cZFJfVm6FyXwtZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4F
vzmnZXzZU71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDvYDT+
sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGya9nsNIfNBBIf1Lll
RWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx41YjeEW/warweoDVG7zaxrHEc/k/r
ZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/ZwABAAE=
Nun, wenn ich den Schlüssel zu nehmen.pem-Schlüsselpaar, dass der E-Modul & exponent waren ursprünglich extrahiert aus, und zeigen Sie den öffentlichen Teil wie so
openssl rsa -in key.pem -pubout -out pubkey.pem
Bekomme ich diesen string (ich habe die weggelassen header & Fußzeilen :
<<<<<<<<< valid public key data extracted from keypair >>>>>>>>>
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZyrQA6cZFJfVm6FyXwt
ZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4FvzmnZXzZ
U71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDv
YDT+sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGy
a9nsNIfNBBIf1LllRWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx4
1YjeEW/warweoDVG7zaxrHEc/k/rZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/
ZwIDAQAB
Können Sie sehen, dass die wichtigsten Daten, die ich entpackt habe und dann base64-codiert mich ist
tatsächlich in den Daten vorhanden von den gültigen öffentlichen Schlüssel extrahierten Daten aus dem Schlüssel.pem mit openssl.
Allerdings gibt es 45 Zeichen am Anfang, dass meine eigenen extrahierten Daten müssen nicht -
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
und die letzten 8 Zeichen unterscheiden sich auch.
ZwIDAQAB
Kann jemand einige Ratschläge, wie konvertieren von einem modulus und exponent in einen verwendbaren öffentlichen Schlüssel?
(das Ziel ist, dies in einem bash-Skript, nicht python oder C, wie ich gesehen habe viele vermuten.)
InformationsquelleAutor Erik Nyquist | 2014-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Befehl, die Sie verwendet,
openssl rsa -in key.pem -pubout -out pubkey.pem
stellt das ASN.1 Struktur wie dieser:(Sehen Sie die Struktur mit
openssl asn1parse -in pubkey.pem
oder mit einer online-ASN.1 decoder).Inhalt:
ganze Folge plus die Codierung der E-Modul)
Wenn du den modulus und exponent bytes korrekt erfasst, können Sie zu konstruieren, das den öffentlichen Schlüssel in form, verständlich von OpenSSL, durch die Verkettung dieser vier Dinge. Sie haben bereits die ersten mehr-header. Die "Mitte-header -" '02 03':
Wenn Ihr E-Modul ist 2048 Byte und exponent 3 Byte (also, dass die Länge der Felder bleibt), die PEM-Datei erzeugt werden kann, durch die Verkettung dieser vier:
Dass ist der Grund, warum das Letzte Byte aus dem binären dump unterscheiden sich von den OpenSSL-Ausgabe: die extrahierten 260 Byte nicht enthalten
02 03
, aber stattdessen Aufzeichnung 65537 als00 01 00 01
(nicht01 00 01
wie in ASN.1-Kodierung).Zusammenfassen, produzieren Sie die PEM-Datei wie folgt:
Konvertieren Sie Ihre extrahierten E-Modul+exponent zurück von base64 und extrahieren Sie Sie (beachten Sie die 257 byte-offset zum überspringen der führenden null-byte 65537!):
Erstellen der Kopfzeilen:
Verketten Sie zusammen:
Umwandeln PEM:
Test, dass Sie die arbeiten, Schlüssel -, indem Sie es mit ASN.1 decoder, oder durch
InformationsquelleAutor Konstantin Shemyak