Die Lösung einer substitution cipher mit python
Ich weiß, ähnliche Fragen gestellt wurden, aber dies ist ein trivialer Fall.
Gegeben ist eine text-Datei endcoded mit einer substitution cipher, ich muss Sie entschlüsseln, auf Basis von python. Ich bin nicht gegeben, die alle Beispiele richtig entziffert Worte. Die Beziehung ist eine 1-zu-1-und Fall-nicht einen Unterschied machen. Auch die Zeichensetzung ist nicht geändert und die Räume sind Links, wo Sie sind. Ich brauche keine Hilfe mit dem code so viel wie ich brauche Hilfe mit einer Allgemeinen Vorstellung davon, wie dies getan werden könnte, in code. Meine wichtigsten Ansätze umfassen:
- Einengung der Wahlmöglichkeiten, indem zuerst die Lösung 1, 2 oder 3-Zeichen Worte.
- Ich könnte eine Liste von englischen Wörtern in verschiedenen Größen zu vergleichen.
- Die ich verwenden könnte Häufigkeitsverteilungen der Buchstaben.
Hat jemand eine Idee von einem Allgemeinen Ansatz, den ich nehmen könnte, dies zu tun?
- Dies ist eine Frage, über Kryptoanalyse, anstatt zu Programmieren...wenn das der Fall ist, es ist off-topic.
- Nein, es ist on-topic. Eine substitution cipher ist nicht so schwer zu verstehen, so ist es nicht irgendeine abstrakte Krypto-Sache.
- Es ist wirklich nicht über Kryptoanalyse, so viel wie es geht um eine effektive Programmierung Umsetzung. Ich dachte, eine 1-zu-1-substitution cipher war leicht genug zu verstehen.
- Es ist nicht ein Fall von nicht Verständnis des Themas. Ich denke, für mich, die Frage über den Algorithmus, anstatt es umzusetzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde zuerst eine Liste von englischen Wörtern nachschlagen können. Als Nächstes erstellen Sie eine Liste der möglichen 2-und 3-Buchstaben-Wörter. Dann starten Sie einfach testen, diese kleinen Worte in Ihrem cipher. Sobald Sie erraten, ein kleines Wort, überprüfen Sie die großen Worte gegen Ihre word-Liste. Wenn auch einige der Worte nicht mehr möglich Fertigstellungen in der Liste, bist du auf dem Holzweg. Wenn ein Wort nur einen möglichen Abschluss, akzeptieren Sie es als richtig und weiter. Schließlich werden Sie erreichen, entweder eine Lösung, bei der alle Wörter in Ihre englischen Wort-Liste, oder du wirst einen Punkt erreichen, wo es keine Lösung gibt für ein Wort.
Schrieb ich etwas davon, wenn Haley ' s Rede war alles verzerrt. Es war nicht automagic obwohl; es machte Vermutungen basierend auf etaoinshrdlu (die am häufigsten verwendeten Buchstaben in der englischen, sortiert die meisten zu mindestens) und lassen Sie den Benutzer interaktiv ändern die Bedeutung eines gegebenen Chiffretext-Buchstaben.
So wäre es für Sie so etwas wie:
und Sie würden manuell erraten, welcher Buchstabe jede Zahl vertreten, bis Sie etwas hatten gut lesbar.
Der Vorteil dieses Ansatzes ist, dass es tolerieren können Tippfehler. Wenn Ihr encryptor macht jeder Fehler (oder verwendet Worte, die nicht in Ihrem Wörterbuch im Klartext) Sie können finden sich mit eine unsolveable puzzle.
Sagte, Zauber-Steine haben große Listen von englischen Wörtern. Ich habe in Debian dictionaries-common Paket für meine hangman solver.
Könnten Sie versuchen, diesen Ansatz:
Speichern Sie eine Liste von gültigen Worten (in einem Wörterbuch) und einen "normalen" Brief, Paket für Ihre Sprache (in einer Liste).
Berechnen Sie die Verteilung der Buchstaben in dem verstümmelten text.
Vergleichen Sie Ihr verstümmelt Verteilung mit den normalen ein und regarble Sie Ihren text entsprechend.
Wiederholen: Legen Sie ein array (Wert) aus allen 26 Buchstaben zu schweben (Rang('A')=Rang (B')=...=Rang('Z')=0.0)
Überprüfen Sie die Wörter im erzeugten text gegen Wörter im Wörterbuch. Wenn ein Wort im Wörterbuch, erhöhen den Rang des Wortes die Buchstaben (so etwas wie: hinzufügen eines standard-Wert, sagen wir 1.0). In anderen Worten Berechnung Ergebnis (eine Funktion der Gesamt-Rang und die Anzahl der Wörter im Wörterbuch).
Speichern text in die High-score-Tabelle (wenn die Punktzahl hoch genug ist).
Wenn alle Wörter in dem Wörterbuch, oder wenn der Gesamt-Rang hoch genug ist, oder wenn die Schleife fertig war, mehr als 10000 mal, Ende.
Falls nicht, wählen Sie zufällig zwei Buchstaben und Austausch von Ihnen. Aber mit verändern, distribution, Briefe mit hohen Rang haben sollte weniger Chancen vertauscht.
Wiederholen.
Ende: Print-High-score-Texte.
Das Verfahren ähnelt Simulated Annealing