Ich versuche eine Zeichenfolge in Javascript mit RSA (öffentlicher Schlüssel) zu verschlüsseln Und ich möchte diese Zeichenfolge in Python (2.7) mit meinem privaten Schlüssel entschlüsseln.JSEncrypt to PyCrypto RSA-Verschlüsselung nicht möglich
Die Bibliotheken Ich verwende sind JSEncrypt und PyCrypto Das Problem hierbei ist, dass PyCrypto Probleme den verschlüsselten String
Dieser Teil verschlüsselt die Zeichenfolge zu entschlüsseln hat:
var encrypted = new JSEncrypt();
encrypted.setPublicKey(key); // key == '-----BEGIN PUBLIC'.....
encrypted = encrypted.encrypt('test');
Die erzeugten verschlüsselten String aussieht wie folgt aus: HJuyZtuUbR4EvjZp0pirbEw0OX8KD7UDNyvSMx3plfzYPjV7r8RBOkouCkvPBG2XOF6E5lPr0ukWClF0u5HB8M6qF8b9xTMnM/j5e41iaPa/oIZyL0JC4h + FZ7cv/P6ygmaSafQ1xc96JltTbuW3u/YYdwmv/01CnFyaIEWW3gk =
012.351.Dieser Teil soll es entschlüsseln:
private_rsa_key = open('rsa_1024_priv.pem', 'r').read()
rsa_key = RSA.importKey(private_rsa_key)
decrypted = rsa_key.decrypt(b64decode(encrypted_string))
Das Ergebnis sollte nun ‚Test‘ sein, aber in der Tat ist es:
Die richtige Zeichenfolge immer am Ende gesetzt wird, aber ich muß den Teil davor loswerden.
Zu Testzwecken habe ich versucht, den String in Python zu verschlüsseln, mit diesem Code:
public_rsa_key = open('rsa_1024_pub.pem', 'r').read()
rsa_key = RSA.importKey(public_rsa_key)
encrypted = rsa_key.encrypt('test', 'x')
die perfekt erweist sich als 'Test', wenn das Entschlüsseln, aber ganz anders verschlüsselt aussieht:
('\x0bY\x1ckk\x7f\xd6\xda$\x05g\xa0\x0bxI\x0cO9\x8b?>M#X\xd2_[\xb7\xf1\xd0f\xb4\x92C\x01z\xa4\x02q\xb9\xb1\x80\x82\xe8\xe4\\E\x85\xa7r\xff\x1aIL,\xd8\xce\xaf\xef\xb4)\x84\x92]\xabA\xc9+\xd6\xef}\x08\xce\xe8\x97\xf8}\x84(\xb3\x9c\xfe7g\xe0\x869\x8b\xe8\xf8\xdf\x85}\xb0\x87\x1a2\xab\xda\xca\xfd\x81\xc0\x98\x12y\x92\x13\xd6\xa5a\xf3\x9aU\xb5\xa4d\xb8\xfc\xa3\xd1\xe2<\x07\xda\xc3\x9e\xc2',)
I Ich frage mich, warum dieser verschlüsselte Text jetzt ein Tupel ist, mit Hex darin. Meiner Meinung nach sieht die verschlüsselte Zeichenfolge von JS korrekt aus. Wie kann ich PyCrypto dazu bringen, die Zeichenfolge korrekt zu entschlüsseln?
Vielen Dank im Voraus
Danke für Ihre Zeit. Ich musste die letzte Zeile ändern in: decrypted = cipher.decrypt (b64decode (verschlüsselt), "ERROR") und es funktioniert jetzt. – DarthVader
Ja, dieses Snippet nimmt an, dass "verschlüsselt" wirklich die rohen verschlüsselten Daten sind, wie sie z. 'cipher.encrypt (b'some message ')'. Ich denke, dass ein solcher Fall im Allgemeinen allgemeiner ist, also werde ich die Antwort so lassen, base64 de/decoding, wenn nötig, ist trivial. – mata
nicht b64decode (verschlüsselter_string) vergessen !! – mouse