diff --git a/app/app.py b/app/app.py index abb8a21..75eb78b 100644 --- a/app/app.py +++ b/app/app.py @@ -201,6 +201,12 @@ def auswahl_verarbeiten(): elif auswahl == "Autokey-Chiffre": st.session_state.output_text = tools.autokey(text, additional_parameter) st.session_state.map_data = None + elif auswahl == "Polybios kodieren": + st.session_state.output_text = tools.polybios_encode(text, additional_parameter) + st.session_state.map_data = None + elif auswahl == "Polybios dekodieren": + st.session_state.output_text = tools.polybios_decode(text, additional_parameter) + st.session_state.map_data = None elif auswahl == "REPLACE": st.session_state.output_text = tools.REPLACE(text) st.session_state.map_data = None @@ -291,7 +297,8 @@ option = st.sidebar.radio("hidden_label", "Wolseley-Chiffre", "Mono.-Substitution", "Autokey-Chiffre", - "", + "Polybios kodieren", + "Polybios dekodieren", "", "", "", @@ -309,7 +316,7 @@ if option == "Dummy mit Karte": "Optionaler Zusatztext für Dummy mit Karte", placeholder="Zusätzliche Eingabe hier" ) -elif option in ["Vigenere-Chiffre", "Wolseley-Chiffre", "Autokey-Chiffre"]: +elif option in ["Vigenere-Chiffre", "Wolseley-Chiffre", "Autokey-Chiffre", "Polybios kodieren", "Polybios dekodieren"]: additional_parameter = st.text_input( "Schlüsselwort:", placeholder="Schlüsselwort hier eingeben" diff --git a/app/tools.py b/app/tools.py index 582e344..6731564 100644 --- a/app/tools.py +++ b/app/tools.py @@ -2108,41 +2108,33 @@ def autokey(eingabetext, pw): ausgabetext = f"_Dekodiert:_ \n{decoded_text} \n \n" ausgabetext += f"_Kodiert:_ \n{encoded_text}" return ausgabetext -''' -def polybios_encode(): - hilfetext = """HILFE: [Polybios-Chiffre kodieren] -Die 5x5 Polybios-Chiffre kodiert Buchstaben zu zweistelligen -Zahlen dazu wird das Schlüsselalphabet in ein 5x5-Quadrat -eingetragen. Die Buchstaben werden dann sozusagen zu ihren -entsprechenden "Koordinaten" kodiert. Im unten gezeigten -Quadrat wird so aus A 11, aus B 12, aus Q 41, usw. -Da in ein 5x5 Quadrat nur 25 Buchstaben passen wird -typischer Weise J und I zusammengefasst, -(alternativ auch U und V), sollen auch Ziffern kodiert -werden wird mit einem 6x6-Quadrat gearbeitet, bei welchem -dann für das komplette Alphabet und die Ziffern 0-9 Platz ist. - 1 2 3 4 5 -1 A B C D E -2 F G H I K -3 L M N O P -4 Q R S T U -5 V W X Y Z -Kommt für die Chiffre ein Passwort zum Einsatz wird das -Code-Quadrat so abgeändert wie es in der Hilfe zur -Woseley-Chiffre beschrieben ist. -Die Funktion ist so gestaltet, daß alle nicht im jeweiligen -Codealphabet vorhandenen Zeichen herausgefiltert werden. -Zur Information wird für jede Polybios-Variante auch noch -einmal der verwendete Klartext und das verwendete Passwort -ausgegeben wird. -""" - - eingabetext = Eingabe.get(1.0, END) + +def polybios_encode(eingabetext, pw): + hilfetext = ('### Polybios-Chiffre kodieren\n' + 'Die 5x5 Polybios-Chiffre kodiert Buchstaben zu zweistelligen Zahlen dazu wird das Schlüsselalphabet ' + 'in ein 5x5-Quadrat eingetragen. Die Buchstaben werden dann sozusagen zu ihren entsprechenden ' + '"Koordinaten" kodiert. Im unten gezeigten Quadrat wird so aus A 11, aus B 12, aus Q 41, usw. Da in ' + 'ein 5x5 Quadrat nur 25 Buchstaben passen wird typischer Weise J und I zusammengefasst, (alternativ ' + 'auch U und V), sollen auch Ziffern kodiert werden wird mit einem 6x6-Quadrat gearbeitet, bei ' + 'welchem dann für das komplette Alphabet und die Ziffern 0-9 Platz ist. \n' + '| |1|2|3|4|5|\n' + '|-|-|-|-|-|-|\n' + '|1|A|B|C|D|E|\n' + '|2|F|G|H|I|K|\n' + '|3|L|M|N|O|P|\n' + '|4|Q|R|S|T|U|\n' + '|5|V|W|X|Y|Z|\n\n' + 'Kommt für die Chiffre ein Schlüsselwort zum Einsatz wird das Code-Quadrat so abgeändert das die ' + 'Buchstaben des Schlüsselwortes entsprechend ihres ersten Vorkommens Zeile für Zeile in das ' + 'Codequadrat eingetragen werden, der Rest wird mit den verbliebenen Buchstaben aufgefüllt. Zur ' + 'Information wird für jede Polybios-Variante auch noch einmal der verwendete Klartext und das ' + 'verwendete Passwort ausgegeben.') + if pw is None: + return hilfetext text = eingabetext.rstrip() - pw = PW_Eingabe.get() pw = pw.strip() if text == "": - Ausgabe.insert(1.0, hilfetext + "\n") + return hilfetext else: qz5 = [11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55] alpha5ij = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird durch i ersetzt @@ -2210,53 +2202,48 @@ ausgegeben wird. ctext6 = "" for b in text6: ctext6 += wb6[b] - Ausgabe.insert(1.0, ctext6 + "\n") - Ausgabe.insert(1.0, "Passwort: " + passw6 + "\n", "gr") - Ausgabe.insert(1.0, "Klartext: " + text6 + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 6x6\n", "bu") - Ausgabe.insert(1.0, ctext5uv + "\n\n") - Ausgabe.insert(1.0, "Passwort: " + passw5uv + "\n", "gr") - Ausgabe.insert(1.0, "Klartext: " + text5uv + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 5x5 (v=u)\n", "bu") - Ausgabe.insert(1.0, ctext5ij + "\n\n") - Ausgabe.insert(1.0, "Passwort: " + passw5ij + "\n", "gr") - Ausgabe.insert(1.0, "Klartext: " + text5ij + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 5x5 (j=i)\n", "bu") + ausgabetext = "|Polybios 5x5 (j=i)| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Klartext|{text5ij}|\n" + ausgabetext += f"|Schlüsselwort|{passw5ij}|\n" + ausgabetext += f"|kodiert|{ctext5ij}\n \n" + ausgabetext += "|Polybios 5x5 (v=u)| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Klartext|{text5uv}|\n" + ausgabetext += f"|Schlüsselwort|{passw5uv}|\n" + ausgabetext += f"|kodiert|{ctext5uv}|\n \n" + ausgabetext += "|Polybios 6x6| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Klartext|{text6}|\n" + ausgabetext += f"|Schlüsselwort|{passw6}|\n" + ausgabetext += f"|kodiert|{ctext6}|\n" + return ausgabetext - -def polybios_decode(): - hilfetext = """HILFE: [Polybios-Chiffre dekodieren] -Die 5x5 Polybios-Chiffre kodiert Buchstaben zu zweistelligen -Zahlen dazu wird das Schlüsselalphabet in ein 5x5-Quadrat -eingetragen. Die Buchstaben werden dann sozusagen zu ihren -entsprechenden "Koordinaten" kodiert. Im unten gezeigten -Quadrat wird so aus A 11, aus B 12, aus Q 41, usw. -Da in ein 5x5 Quadrat nur 25 Buchstaben passen wird -typischer Weise J und I zusammengefasst, -(alternativ auch U und V), sollen auch Ziffern kodiert -werden wird mit einem 6x6-Quadrat gearbeitet, bei welchem -dann für das komplette Alphabet und die Ziffern 0-9 Platz ist. - 1 2 3 4 5 -1 A B C D E -2 F G H I K -3 L M N O P -4 Q R S T U -5 V W X Y Z -Kommt für die Chiffre ein Passwort zum Einsatz wird das -Code-Quadrat so abgeändert wie es in der Hilfe zur -Woseley-Chiffre beschrieben ist. -Die Funktion ist so gestaltet, daß alle nicht im jeweiligen -Codealphabet vorhandenen Zeichen herausgefiltert werden. -Zur Information wird für jede Polybios-Variante auch noch -einmal das verwendete Passwort ausgegeben wird. -""" - - eingabetext = Eingabe.get(1.0, END) +def polybios_decode(eingabetext, pw): + hilfetext = ('### Polybios-Chiffre dekodieren\n' + 'Die 5x5 Polybios-Chiffre kodiert Buchstaben zu zweistelligen Zahlen dazu wird das Schlüsselalphabet ' + 'in ein 5x5-Quadrat eingetragen. Die Buchstaben werden dann sozusagen zu ihren entsprechenden ' + '"Koordinaten" kodiert. Im unten gezeigten Quadrat wird so aus A 11, aus B 12, aus Q 41, usw. Da in ' + 'ein 5x5 Quadrat nur 25 Buchstaben passen wird typischer Weise J und I zusammengefasst, (alternativ ' + 'auch U und V), sollen auch Ziffern kodiert werden wird mit einem 6x6-Quadrat gearbeitet, bei ' + 'welchem dann für das komplette Alphabet und die Ziffern 0-9 Platz ist. \n' + '| |1|2|3|4|5|\n' + '|-|-|-|-|-|-|\n' + '|1|A|B|C|D|E|\n' + '|2|F|G|H|I|K|\n' + '|3|L|M|N|O|P|\n' + '|4|Q|R|S|T|U|\n' + '|5|V|W|X|Y|Z|\n\n' + 'Kommt für die Chiffre ein Schlüsselwort zum Einsatz wird das Code-Quadrat so abgeändert das die ' + 'Buchstaben des Schlüsselwortes entsprechend ihres ersten Vorkommens Zeile für Zeile in das ' + 'Codequadrat eingetragen werden, der Rest wird mit den verbliebenen Buchstaben aufgefüllt. Zur ' + 'Information wird für jede Polybios-Variante auch noch einmal das verwendete Passwort ausgegeben.') + if pw is None: + return hilfetext text = eingabetext.rstrip() - pw = PW_Eingabe.get() pw = pw.strip() if text == "": - Ausgabe.insert(1.0, hilfetext + "\n") + return hilfetext else: qz5 = [11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55] alpha5ij = "ABCDEFGHIKLMNOPQRSTUVWXYZ" # j wird durch i ersetzt @@ -2316,17 +2303,21 @@ einmal das verwendete Passwort ausgegeben wird. ctext5ij += " " ctext5uv += " " ctext6 += " " - Ausgabe.insert(1.0, ctext6 + "\n") - Ausgabe.insert(1.0, "Passwort: " + passw6 + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 6x6\n", "bu") - Ausgabe.insert(1.0, ctext5uv + "\n\n") - Ausgabe.insert(1.0, "Passwort: " + passw5uv + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 5x5 (v=u)\n", "bu") - Ausgabe.insert(1.0, ctext5ij + "\n\n") - Ausgabe.insert(1.0, "Passwort: " + passw5ij + "\n", "gr") - Ausgabe.insert(1.0, "Polybios 5x5 (j=i)\n", "bu") - + ausgabetext = "|Polybios 5x5 (j=i)| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Schlüsselwort|{passw5ij}|\n" + ausgabetext += f"|dekodiert|{ctext5ij}|\n \n" + ausgabetext += "|Polybios 5x5 (v=u)| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Schlüsselwort|{passw5uv}|\n" + ausgabetext += f"|dekodiert|{ctext5uv}|\n \n" + ausgabetext += "|Polybios 6x6| |\n" + ausgabetext += "|-|-|\n" + ausgabetext += f"|Schlüsselwort|{passw6}|\n" + ausgabetext += f"|dekodiert|{ctext6}|\n" + return ausgabetext +''' def klopfcode_encode(): hilfetext = """HILFE: [Klopfcode kodieren] Der Klopfcode ist im Prinzip eine Polybios Chiffre