Frage

Was ich versuche zu tun, ist einige öffentliche PEM -Schlüssel mit Python Gae zu lesen.

Das RSAKEY -Modul analysiert keine öffentlichen Schlüssel, nur privat.

Wenn ich den Modul und den Exponent aus dem PEM bekommen kann, kann ich von dort aus gehen.

Erforschung eines typischen PEM (der Art, wie ich es verwenden werde) mit OpenSSL ASN1Parse kann ich das finden BIT STRING Wo leben sie.

Aber ich kann nicht herausfinden, wie man sie mit dem Gdata Asn1Parser findet.

Zum Beispiel OpenSSL -Ausgang:

openssl asn1parse -i -in test.pem
 0:d=0  hl=3 l= 159 cons: SEQUENCE          
 3:d=1  hl=2 l=  13 cons:  SEQUENCE          
 5:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
16:d=2  hl=2 l=   0 prim:   NULL              
18:d=1  hl=3 l= 141 prim:  BIT STRING

Und dann kann ich den RSA -Modul und den Exponent sehen:

openssl asn1parse -strparse 18 -i -in test.pem 
  0:d=0  hl=3 l= 137 cons: SEQUENCE          
  3:d=1  hl=3 l= 129 prim:  INTEGER           :09C7A8007111B2B...
135:d=1  hl=2 l=   3 prim:  INTEGER           :010001

Wenn ich dann das gleiche PEM einnehme und in Python stecke es hinein bytes, Wie kann ich das richtige Kind dazu bringen, diese Werte zu erhalten?

asn1 = ASN1Parser(bytes)
modulus = asn1.getChild(1).getChild(0).value
exponent = asn1.getChild(1).getChild(1).value
binascii.hexlify(modulus)

Oder was? Ich kann nicht herausfinden, welches Level usw. Ich muss aussehen. Ich weiß auch nicht wirklich, was ich tue ... Mit Hexlify kann ich die Werte dort sehen, aber immer (mit Kind und Tiefe spielen) mit zusätzlichen Dingen und/oder nicht die volle Zahl wie gezeigt in OpenSSL.

War es hilfreich?

Lösung

Ich habe TLSLite geändert, um das zu tun, worüber Sie sprechen ... Hier ist ein Ausschnitt, der Ihnen helfen sollte. "Bytes" ist der Derkodierte öffentliche Schlüssel.

Ich denke, das Problem, das Sie haben, ist, dass einige Schlüssel möglicherweise "Polsterung" haben. Die Polsterlänge ist das erste Byte der Nutzlast. Sie müssen dann die Polsterbytes und so viele Bytes der Polsterung überspringen.

@staticmethod
def parseDERPublicKey(bytes):
    a = ASN1Parser(bytes)
    b = a.getChild(1)
    padding = b.value[1]
    # TODO: I am assuming padding is 0, this is wrong.
    #       Skip the padding as well.
    c = b.value[1:] # get the mod/exp portion after the padding
    d = ASN1Parser(c)

    modulus = bytesToNumber(d.getChild(0).value)
    exponent = bytesToNumber(d.getChild(1).value)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top