Frage

Was regulärer Ausdruck kann ich (falls vorhanden) zu bestätigen verwenden, das eine gegebene Zeichenkette ist ein rechtlicher ssh öffentlicher RSA-Schlüssel?

Ich brauche nur den eigentlichen Schlüssel zu validieren. - Ich kümmere mich nicht um den Schlüssel geben Sie den vorausgeht es oder den Benutzernamen Kommentar nach dem

Im Idealfall jemand wird auch den Python-Code bietet die regex Validierung ausgeführt werden.

Danke.

War es hilfreich?

Lösung

A „gut genug“ Check ist, wenn der Schlüssel beginnt mit dem richtigen Header zu sehen.

Der Datenteil der Schlüsseldatei sollte von Base64 dekodieren, oder es wird mit einem base64.binascii.Error

scheitern

Entpacke die ersten 4 Bytes (int), der 7. sein sollte Dies ist Länge der folgenden Zeichenkette (Ich denke, dies anders sein könnte, aber du bist nur mit ssh-rsa betroffen).

openssh_pubkey = open('keyfile').read()
type, key_string, comment = openssh_pubkey.split()
data = base64.decodestring(key_string)
int_len = 4
str_len = struct.unpack('>I', data[:int_len])[0] # this should return 7
data[int_len:int_len+str_len] == type

Alternativ können Sie die binären Kontrollen verzichten, und sucht AAAAB3NzaC1yc2EA zu Beginn eines ssh-rsa Schlüssel, biss ich würde es noch überprüfen gültig base64.

[Bearbeiten] Zur Verdeutlichung:
Über die Spezifikation, ist der erste Teil, wenn der Schlüssel eine Länge Präfix-String. Die Länge wird als Big-Endian-unsigned int gepackt ( '> I' für eine Python-Struktur). Es ist ein 7 hier, weil die folgende Zeichenfolge ‚ssh-rsa‘, 7 Bytes lang ist. data[4:11] ist das nächste 7 Bytes (pro Länge Präfix), aber ich bearbeiten den Code über einige beschreibenden Variablen zu verwenden, um zu versuchen und dies deutlicher zu machen. Wenn Sie gründlich sein wollen, sollten Sie auch ssh-dss überprüfen und möglicherweise pgp-sign-rsa und pgp-sign-dss, aber sie sind weit weniger verbreitet.

Andere Tipps

Auf der Grundlage des Verweis auf „Schlüsselart, dass es vorangeht“ und „username Kommentar, nachdem es“, ich nehme an, Sie sprechen über öffentlich in ssh2 keyfile-Format gespeicherten Schlüssel.

In diesem Format wird der Schlüssel in base64 Format, so dass eine einfache Überprüfung würde sein, um sicherzustellen, dass die Zeichenfolge nur gültig base64-Zeichen enthalten.

Wenn Sie ein wenig weiter gehen wollen, könnten Sie feststellen, dass die ersten paar Bytes des codierten Schlüssels den Schlüsseltyp angeben, und auf diesem Spiel. Siehe diesen Beitrag , die sagt:

  

Wenn Sie Base64-decode das erste Bit   dass Text (AAAAB3NzaC1yc2EA) finden Sie   finden, dass es mit dem Bytes 00 00 beginnt   00 07 (was anzeigt, dass eine 7-stellige   String folgt) und dann die sieben   Zeichen „ssh-rsa“, das ist der Schlüssel   Art. DSA-Schlüssel beginnt mit der   etwas andere Saite   `AAAAB3NzaC1kc3MA‘, die dekodiert   ähnlich wie die Zeichenfolge "ssh-dss".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top