From 97a096446c72b11e0ad76e2141265a35a7fff57f Mon Sep 17 00:00:00 2001 From: tebarius Date: Thu, 24 Jul 2025 22:44:59 +0200 Subject: [PATCH] Vigenere --- app/app.py | 18 ++++++++++++++-- app/tools.py | 61 +++++++++++++++++++++------------------------------- 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/app/app.py b/app/app.py index d400e08..3d4c30d 100644 --- a/app/app.py +++ b/app/app.py @@ -182,6 +182,15 @@ def auswahl_verarbeiten(): elif auswahl == "T9-EN dekodieren": st.session_state.output_text = tools.t9_en(text) st.session_state.map_data = None + elif auswahl == "Vigenere-Chiffre": + st.session_state.output_text = tools.vigenere(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 + elif auswahl == "REPLACE": + st.session_state.output_text = tools.REPLACE(text) + st.session_state.map_data = None elif auswahl == "REPLACE": st.session_state.output_text = tools.REPLACE(text) st.session_state.map_data = None @@ -260,6 +269,8 @@ option = st.sidebar.radio("hidden_label", "Re-Morse-EN", "T9-DE dekodieren", "T9-EN dekodieren", + "Vigenere-Chiffre", + "", "", "Dummy mit Karte", ), @@ -275,13 +286,16 @@ if option == "Dummy mit Karte": "Optionaler Zusatztext für Dummy mit Karte", placeholder="Zusätzliche Eingabe hier" ) - +elif option == "Vigenere-Chiffre": + additional_parameter = st.text_input( + "Schlüsselwort:", + placeholder="Schlüsselwort hier eingeben" + ) # Button zum manuellen Ausführen der Verarbeitungsfunktion if st.button(f"{st.session_state.option}"): auswahl_verarbeiten() # Ausgabefeld -st.markdown('__Ausgabe:__') st.markdown(st.session_state.output_text) # Karte anzeigen, falls aktiviert diff --git a/app/tools.py b/app/tools.py index 0368392..35d78bc 100644 --- a/app/tools.py +++ b/app/tools.py @@ -1454,7 +1454,7 @@ def pi_suche(eingabetext): def anagramm_suche_de(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("### Anagrammsuche mit Wörterbuch\n" + return ("### Anagrammsuche mit Wörterbuch DE\n" "Diese Funktion benutzt eine deutsche Wörterbuchdatei vom Project " "https://sourceforge.net/projects/germandict um zu überprüfen ob sich unter Verwendung __aller__ " "eingegebenen Buchstaben Wörter bilden lassen, welche im Wörterbuch vorkommen.") @@ -1508,7 +1508,7 @@ def anagramm_suche_en(eingabetext): def wortsuche_de(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("### Wortsuche mit Wörterbuch\n" + return ("### Wortsuche mit Wörterbuch DE\n" "Wer kennt es nicht? Man sucht ein Wort mit einer bestimmten Anzahl an Buchstaben und weiß aber z.B. " "nur den Anfangsbuchstaben und die letzten 3 Buchstaben. Hierbei soll diese Funktion helfen. " "Unbekannte Buchstaben werden dabei einfach durch * ersetzt. Klein-/Großschreibung in der Eingabe " @@ -1544,7 +1544,7 @@ def wortsuche_de(eingabetext): def wortsuche_en(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("### Wortsuche mit Wörterbuch\n" + return ("### Wortsuche mit Wörterbuch EN\n" "Wer kennt es nicht? Man sucht ein Wort mit einer bestimmten Anzahl an Buchstaben und weiß aber z.B. " "nur den Anfangsbuchstaben und die letzten 3 Buchstaben. Hierbei soll diese Funktion helfen. " "Unbekannte Buchstaben werden dabei einfach durch * ersetzt. Klein-/Großschreibung in der Eingabe " @@ -1717,7 +1717,7 @@ def t9_en(eingabetext): '-': '1', ',': '1', '+': '0', ')': '1', '(': '1', 'SS': '7'} eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("### T9 EN\n" + return ("### T9-EN\n" "Mit Hilfe der englischen Wörterliste en_US-large.txt vom Project " "https://sourceforge.net/projects/wordlist ermittelt diese Funktion alle im Wörterbuch " "enthaltenen Wörter die zu der eingegebenen T9-kodierten Ziffernfolge passen und gibt diese aus. \n" @@ -1742,38 +1742,30 @@ def t9_en(eingabetext): wbfile.close() return ausgabetext -''' -def vigenere(): - hilfetext = """HILFE: [Vigenere-Chiffre] -Die Eingabe eines Schlüsselwortes ist hier erforderlich!!! -Die Vigenere-Chiffre baut auf dem Prinzip der Cesar-Chiffre -auf, wobei hier die Verschiebung jedes einzelnen Buchstaben -durch die Buchstabenwerte eines Schlüsselwortes definiert -werden. Da der zu verschlüsselnde Text im allgemeinen -länger als das Schlüsselwort ist, wird das Schlüsselwort immer -wieder wiederholt. Ist der Schlüssel mindestens genauso lang wie -der Klartext entspricht dies dann dem One-Time-Pad-Chiffre. -Der eingegebene Text wird hier mit dem eingegebenen Schlüsselwort -kodiert und dekodiert ausgegeben und zwar sowohl in der -Variante, daß Sonderzeichen Schlüsselbuchstaben verbrauchen -als auch nicht. -""" +def vigenere(eingabetext, pw): + hilfetext = ("### Vigenere-Chiffre\n" + "Die Eingabe eines Schlüsselwortes ist hier erforderlich!!! Die Vigenere-Chiffre baut auf dem Prinzip " + "der Cesar-Chiffre auf, wobei hier die Verschiebung jedes einzelnen Buchstaben durch die " + "Buchstabenwerte eines Schlüsselwortes definiert werden. Da der zu verschlüsselnde Text im " + "allgemeinen länger als das Schlüsselwort ist, wird das Schlüsselwort immer wieder wiederholt. " + "Ist der Schlüssel mindestens genauso lang wie der Klartext entspricht dies dann dem " + "One-Time-Pad-Chiffre. Der eingegebene Text wird hier mit dem eingegebenen Schlüsselwort kodiert und " + "dekodiert ausgegeben und zwar sowohl in der Variante, daß Sonderzeichen Schlüsselbuchstaben " + "verbrauchen als auch nicht.") bw = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26} ubw = {v: k for k, v in bw.items()} - - eingabetext = Eingabe.get(1.0, END) - text = eingabetext.rstrip() - pw = PW_Eingabe.get() + if pw is None: + return hilfetext pw = pw.strip() + text = eingabetext.rstrip() if text == "" or pw == "": - Ausgabe.insert(1.0, hilfetext + "\n") + return hilfetext else: for b in pw: if b.upper() not in bw: - Ausgabe.insert(1.0, "Das Passwort darf nur die Buchstaben A-Z / a-z enthalten!\n", "re") - return + return "Das Passwort darf nur die Buchstaben A-Z / a-z enthalten!" pwl = len(pw) encoded_text = "" encoded_text_s = "" # wenn Leer und Sonderzeichen Schlüsselbuchstaben verbrauchen @@ -1823,16 +1815,11 @@ als auch nicht. else: decoded_text += ubw[ba].lower() decoded_text_s += ubw[bas].lower() - Ausgabe.insert(1.0, encoded_text_s + "\n") - Ausgabe.insert(1.0, "Kodiert - Sonderzeichen verbrauchen Schlüsselbuchstaben:\n", "bu") - Ausgabe.insert(1.0, decoded_text_s + "\n") - Ausgabe.insert(1.0, "Dekodiert - Sonderzeichen verbrauchen Schlüsselbuchstaben:\n", "bu") - Ausgabe.insert(1.0, encoded_text + "\n") - Ausgabe.insert(1.0, "Kodiert - normal:\n", "bu") - Ausgabe.insert(1.0, decoded_text + "\n") - Ausgabe.insert(1.0, "Dekodiert - normal:\n", "bu") - - + ausgabetext = f"_Dekodiert - normal:_ \n{decoded_text} \n_Kodiert - normal:_ \n{encoded_text} \n" + ausgabetext += f"_Dekodiert - Sonderzeichen verbrauchen Schlüsselbuchstaben:_ \n{decoded_text_s} \n" + ausgabetext += f"_Kodiert - Sonderzeichen verbrauchen Schlüsselbuchstaben:_ \n{encoded_text_s} \n" + return ausgabetext +''' def wolseley(): hilfetext = """HILFE: [Wolseley-Chiffre] Die Eingabe eines Schlüsselwortes ist hier erforderlich!!!