Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Caesar-Shift-Code-Cracker programmieren

KoRny Boy / 13 Antworten / Baumansicht Nickles

hallo zusammen,

ich habe heute angefangen ein Programm zu schreiben das mit dem Caesar-Shift-Code verschlüsselte Texte entschlüsselt.

Als erstes wird der Cipher-Text analysiert. Die verschiedenen Buchstaben werden gezählt und deren Prozentsatz der im text enthaltenden Buchstaben wird jeweils berechnet.
Dann kann man mit Bruteforce den Originaltext herausbekommen was aber bis jetzt nur funktioniert wenn das Alphabet einfach nur um x Stellen verschoben worden ist.

Jetzt möchte ich noch den Text noch so entschlüsseln:
der buchstabe E kommt sehr häufig in englischen und deutschen texten vor, also soll das programm nach dem häufigsten Buchstaben im cipher text suchen und ihn durch eine E ersetzen. Die Prozentzahl des Vorkommens der einzelnen Buchstaben habe ich aus dem englsichen Buch The Code Book von Simon Singh. Also sollen quasi die Prozenzahlen aus dem Buch mit denen im Ciphertext verglichen werden.

Dann möchte ich die Bruteforce variante ausbauen, sodass wirklich jede möglichkeit ausprobiert wird(aber trotzdem so dass jeder Buchstabe einduetig durch einen anderen ersetzt wird). Im moment gibt es ja nur 26 möglcihkeiten; nämlich das verschieben des Alphabets bis es wieder im normalen zustand ist.

Dann noch ein letztes anliegen. Zur Zeit benutze ich Timer um eine Schleife ausführen zu können, denn wenn ich eine normale repeat-until oder for-schleife nehme, bleibt das programm ja stehen bis die schleife zu ende ist, aber bei längeren cipher-texten dauert das halt ziemlich lange und wenn ich die bruteforce variante ausbaue dann erst recht. gibt es eine schnellere möglichkeit als den timer zu benutzen ohne dass das programm stehen bleibt?

gruß korny boy

P.S. das alles wie immer in delphi 7

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „Caesar-Shift-Code-Cracker programmieren“
Optionen
Als erstes wird der Cipher-Text analysiert. Die verschiedenen Buchstaben werden gezählt und deren Prozentsatz der im text enthaltenden Buchstaben wird jeweils berechnet.
Dann kann man mit Bruteforce den Originaltext herausbekommen was aber bis jetzt nur funktioniert wenn das Alphabet einfach nur um x Stellen verschoben worden ist.

Wo braucht man da noch BruteForce, wenn Du schon die Verteilung hast und weißt, daß das die Zeichen nur verschoben wurden (mehr ist Cäsar-Code doch nicht)? ;-)

der buchstabe E kommt sehr häufig in englischen und deutschen texten vor, also soll das programm nach dem häufigsten Buchstaben im cipher text suchen und ihn durch eine E ersetzen. Die Prozentzahl des Vorkommens der einzelnen Buchstaben habe ich aus dem englsichen Buch The Code Book von Simon Singh
Für deutschen Text umbedingt auch die deutsche verteilung verwenden, im Englischen kommt z.B. das Y deutlich häufiger vor als bei uns...

Dann möchte ich die Bruteforce variante ausbauen, sodass wirklich jede möglichkeit ausprobiert wird(aber trotzdem so dass jeder Buchstabe einduetig durch einen anderen ersetzt wird). Im moment gibt es ja nur 26 möglcihkeiten; nämlich das verschieben des Alphabets bis es wieder im normalen zustand ist.
Alles ausprobieren heißt 26! (=403291461126605635584000000 = 4*10^26) Möglichkeiten :-D Von Programmierseite her ist die Umsetzung allerdings kein Problem...

gibt es eine schnellere möglichkeit als den timer zu benutzen ohne dass das programm stehen bleibt?
Die eleganteste Möglichkeit wäre es, das ganze in einem eigenen Thread laufen zu lassen, dann kann das Programm parallel weiter arbeiten. Alternativ könntest Du auch von Zeit zu Zeit ProcessMessages aufrufen, dann sollte das Programmfenster noch auf Eingaben reagieren, aber u.U. nur sehr träge und mit Verzögerung...


Gruß
Borlander
bei Antwort benachrichtigen
KoRny Boy Borlander „ Wo braucht man da noch BruteForce, wenn Du schon die Verteilung hast und...“
Optionen

falls die entschlüsselung mit dem prozentsatz fehlschlägt dann sollte bruteforce als alternative gedacht sein. das habe ich im posting vielleicht etwas falsch dargestellt.

der caesar code enthält zwar nur 26 möglichkeiten aber wenn man nun etwas weiter denkt und die zuordnung der buchstaben nicht in der reihenfolge des alphabets vorliegt, dann steht man im wald, also möchte ich noch etwas über den caesar code heraus denken.

auch wenn ich damit unter beweis stelle dass ich nicht der intelligenteste mensch bin:
warum die rechnung 4*10^26 ?

gruß korny boy

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „falls die entschlüsselung mit dem prozentsatz fehlschlägt dann sollte...“
Optionen

Erstmal eine Frage vorweg: Nach welcher Methode willst Du überhaupt feststelle, ob die entschlüsselung korrekt ist? Irgendwie muß das ja von _softwareseite_ geprüft werden (keine Maus oder Tastatur wird 4*10^26 Klickvorgänge überstehen) ;-)

warum die rechnung 4*10^26 ?
Naja, wie aussagekräftig ist denn 403291461126605635584000000?)
Wenn man weiß das dies ungefähr 4 * 10^26 ist (also 26 Nullen hintendran) kann sich doch gleich was drunter vorstellen ;-)
1 Millon hat 6 Nullen, überlegen wir mal wie lange es dauern würde wenn wir eine Milliarde Kombinationen pro Sekunde abtesten könnten (werden weniger sein) - immer noch 4*10^17s (zum Vergleich: ein Jahr hat etwa 31*10^6 sekunden)...

Falls die Entschlüsselung nach %-Verteilung nicht erfolgreich sein sollte, so würden diese Werte doch immernoch noch eine Möglichkeit bieten die Suche u.U. stark ein zu schränken - sonst hast Du wie oben geschrieben nicht den Hauch einer Chance den Code zu Lebzeiten zu knacken...


Gruß
Borlander

bei Antwort benachrichtigen
KoRny Boy Borlander „Erstmal eine Frage vorweg: Nach welcher Methode willst Du überhaupt feststelle,...“
Optionen

ja, jetzt ist es mir klar denke ich. ich belasse es dann mal bei den 26 möglichkeiten.

Nach welcher Methode willst Du überhaupt feststelle, ob die entschlüsselung korrekt ist?
ich dachte da an einen einfachen texteditor. dann suche ich nach kleinen wörtern wie z.B. IST ER und sowas...

gruß korny boy

p.s. ich hoffe das textfeld akzeptiert html

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „ja, jetzt ist es mir klar denke ich. ich belasse es dann mal bei den 26...“
Optionen
ich dachte da an einen einfachen texteditor. dann suche ich nach kleinen wörtern wie z.B. IST ER und sowas...
Das Problem bei dieser Methode: Gerade bei solchen Kurzen Worten ist die Wahrscheinlichkeit groß, das sie auch in anderen nicht korrekten Kombinationen entstehen können. Wenn man sich auf das Rotieren der Zeichen beschränkt, ist das natürlich schon deutlich eingeschränkt, aber nicht aus zu schließen. Weiterhin wird es sicher auch Texte geben in denen genau die geprüften Worte auf ganz wundersame weise nicht auftauchen werden (es gibt Schließlich auch Menschen die im Lotto gewinnen obwohl dies extrem unwahrscheinlich ist)...

ich hoffe das textfeld akzeptiert htmlbild
Hier bei Nickles.de ist das kein Problem. Oder meinst Du ein TMemo?


Gruß
Borlander
bei Antwort benachrichtigen
KoRny Boy Borlander „ Das Problem bei dieser Methode: Gerade bei solchen Kurzen Worten ist die...“
Optionen

nein,nicht im memo, sondern beim darstellen des postings. ich hatte versucht das zitat kursiv darzustellen. was ja auch funktioniert hat.

gruß korny boy

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „nein,nicht im memo, sondern beim darstellen des postings. ich hatte versucht das...“
Optionen
ich hatte versucht das zitat kursiv darzustellen. was ja auch funktioniert hat.
Zitate lieber logisch auszeichen mit dem CITE-Tage (der i.d.R. allerdings kursiv dargestellt wird)...
bei Antwort benachrichtigen
KoRny Boy Borlander „ Zitate lieber logisch auszeichen mit dem CITE-Tage der i.d.R. allerdings kursiv...“
Optionen

und wie benutze ich den CITE-Tag ?

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „und wie benutze ich den CITE-Tag ?“
Optionen

Genauso wie den I-Tag, nur eben mit <cite> ;-)

bei Antwort benachrichtigen
KoRny Boy Borlander „Genauso wie den I-Tag, nur eben mit - “
Optionen

also ich bin kein html profi...wenn ich das jetzt richtig verstanden habe, dann ist der I-Tag folgendes:

  


und was ist jetzt der große unterschied zwischen dem I-Tag und dem CITE-Tag ?

gruß korny boy
Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
KoRny Boy Nachtrag zu: „also ich bin kein html profi...wenn ich das jetzt richtig verstanden habe, dann...“
Optionen

schade das hat jetzt nicht funktioniert.

also der I-Tag hat folgende funktion? Hallo, ich bin kursiv geschrieben

der CITE-Tag hat folgende funktion? Hallo, ich müsste jezz auch kursiv geschrieben sein

was ist jetzt der große Unterschied zwischen I-Tag und Cite-Tag?

gruß korny boy

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Borlander KoRny Boy „also ich bin kein html profi...wenn ich das jetzt richtig verstanden habe, dann...“
Optionen
und was ist jetzt der große unterschied zwischen dem I-Tag und dem CITE-Tag ?
Der CITE-Tag ist wie schon geschrieben eine logische/inhaltliche Auszeichnung des Textes als Zitat. Der I-Tag eine rein optische Formatierung als Kursiv (Italic)...

Gruß
Borlander
bei Antwort benachrichtigen
KoRny Boy Borlander „ Der CITE-Tag ist wie schon geschrieben eine logische/inhaltliche Auszeichnung...“
Optionen

verstanden habe ich das zwar immer noch nicht, aber lassen wir das.

danke für deine hilfe

gruß korny boy

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen