import sys import os from bigramme import bigramm # Wurde genau eine Datei auf der Kommandozeile als Argument angegeben? if len(sys.argv)!=2: sys.stderr.write("Es muss genau eine Datei angegeben werden.") exit(-1) datei = sys.argv[1] # Gibt es die Datei? if not os.path.exists(datei): sys.stderr.write(f"Input Datei {datei} nicht gefunden\n") # Text einlesen with open(datei, "r") as f: text = f.read() # Unterprogramm zum verschleiern (das wird hier erst definiert, nicht ausgeführt!) # Input: text, key # Output: Verschleierter text def verschleiern(text, key): result = "" for symbol in text: if symbol>='A' and symbol<='Z': nummer = ord(symbol)+key if nummerord('Z'): nummer = nummer-26 symbol = chr(nummer) if symbol>='a' and symbol<='z': nummer = ord(symbol)+key if nummerord('z'): nummer = nummer-26 symbol = chr(nummer) result = result + symbol return result # Testet, ob s ein Kleinbuchstabe ist def kleinbuchstabe(s): return s>='a' and s<='z' def wertung(text): score = 0 for i in range(0, len(text)-1): # Jede Position bis zur vorletzten durchgehen # Zwei Kleinbuchstaben an Positionen i und i+1? if kleinbuchstabe(text[i]) and kleinbuchstabe(text[i+1]): nummer1 = ord(text[i]) - ord('a') nummer2 = ord(text[i+1]) - ord('a') score += bigramm[nummer1][nummer2] return score bestk = 0 bestwertung = 0 besttext = text for k in range(26): t = verschleiern(text,k) # Möglicher Klartext w = wertung(t) # Bewerten print("%2d -> %d" % (k,w)) if (w>bestwertung): # Besser als was wir bis jetzt gesehen haben? bestwertung = w bestk = k besttext = t print("Bester Schlüssel %d mit Resultat" % bestk) print(besttext)