Decrypt Passwort mit Phyton Code?
Hallo,
Habe Schwierigkeiten beim erstellen eines Decoders vielleicht kann einer aushelfen. Der Code wurde einmal gerunnt und ergab die Verschlüsselte Nachricht (siehe unten) und soll nun wieder Decoded werden.
Der Code ist folgender:
import string
from geheim import nachricht
def verschluessle(nachricht):
verschluesselter_text = []
for char in nachricht:
verschluesselter_text.append((123 * char + 18) % 256)
return bytes(verschluesselter_text)
verschluesselter_text = verschluessle(nachricht)
f = open('./nachricht.enc', 'w')
f.write(verschluesselter_text.hex())
f.close()
Und die verschlüsselte Nachricht sieht wie folgt aus:
6e0a9372ec49a3f6930ed8723f9df6f6720ed8d89dc4937222ec7214d89d1e0e352ce0aa6ec82bf622227bb70e7fb7352249b7d893c493d8539dec8fb7935d490e7f9d22ec89b7a322ec8fd80e7f8921
Danke schonmal im Voraus.
2 Antworten
Wo ist dein Problem genau? Und wo hast du dieses Verschlüsselungssystem her?
Grundprinzip sollte sein, die Zeichen (char) der verschlüsselten Nachricht zu nehmen, 18 abzuziehen und durch 123 zu teilen... Da du hier in der Modulo-Welt bist (könnte eine Gruppe oder so sein...) musst du zum teilen die Zahl a finden, die (a*123)%256=1 ist. Das sollte mit erweitertem Euklid gehen. Statt dem teilen multiplizierst du mit der Zahl.
Vom Bauchgefühl würde ich sagen, dass es schwierig werden könnte, da es nicht eindeutig ist. Wäre die 256 eine Primzahl, wäre das Ergebnis eindeutig, da du dann mathematisch einen Körper hättest.
zum teilen die Zahl a finden, die (a*123)%256=1 ist. Das sollte mit erweitertem Euklid gehen
Python bytes haben 8 Bit. Da wird es einfacher sein, alle 256 Codierungen zu berechnen und nach ihrem Ergebnis zu sortieren.
allerdings habe ich es mit der Konvertierung in Hex nicht ganz verstanden in welcher länge man die Blöcke nun auslesen muss
Jeder Hex-Wert hat genau zwei Zeichen.
siehe: https://docs.python.org/3/library/stdtypes.html?highlight=hex#bytes.hex
# Der "verschlüsselte" Text
c='6e0a9372ec49a3f6930ed8723f9df6f6720ed8d89dc4937222ec7214d89d1e0e352ce0aa6ec82bf622227bb70e7fb7352249b7d893c493d8539dec8fb7935d490e7f9d22ec89b7a322ec8fd80e7f8921'
# Berechnen der Lookup-Tabelle (da es um Bytes geht, ist der Wertebereich auf 0..255 begrenzt)
t=[(123 * b + 18) % 256 for b in range(256)]
# Je zwei Hex-Ziffern decken exakt den Wertebereich ab. Durch das Verfahren zum berechnen der Lookup-Tabelle entspricht der Eingabewert für jeden Ausgabewert der Position des Ausgabewertes.
p=''.join([chr(t.index(int(c[i:i+2], 16))) for i in range(0, len(c), 2)])
# Ausgabe des "entschlüsselten" Textes
print(p)
Hi, ja genau die Rechnung an sich hätte ich so wie du es beschrieben hast auch gemacht bzw. wollte es im code auch so umsetzen, allerdings habe ich es mit der Konvertierung in Hex nicht ganz verstanden in welcher länge man die Blöcke nun auslesen muss. Das Ziel war es ein Text der für uns geheim ist und einmal durch den code gerunnt wurde zurück zu decoden (kann es selbst nicht runnen weil kein packet). Ich würde es stand jetzt gerne händisch versuchen und später nach dem rechnerischen das ganze in einen hex to ascii Converter reinpacken. Wenn du mir beim ersten Buchstaben/Zeichen helfen könntest wäre das schon eine enorme Hilfe für mich. Sobald ich das System verstehe geht der rest denk ich wie Butter.
Danke für die ausführliche Erklärung vorhin!