Die Cäsar-Verschlüsselung¶
Listen
Die Cäsar-Verschlüsselung ist eine der ältesten Methoden um einen Text zu verschlüsseln. Dazu verschiebt man einfach das Alphabet um einen bestimmten Wert. Verschiebt man das Alphabet zum Beispiel um 3 Buchstaben, dann wird ein A zu einem D, ein B zu einem E, usw.
So wird ein "HELLO WORLD" wenn man es um 2 Buchstaben verschiebt zu einem "JGNNQ YQTNF".
Was man wissen muss
Um Buchstaben um einen bestimmten Wert zu verschieben, arbeitet man besten mit Zahlen. Der folgende Befehl ord()
wandelt einen Buchstaben in eine Zahl (UTF-Codierung) um
letter = "A"
print(ord(letter))
Dem Buchstaben A wird also der Wert 65 zugeordnet. B hat den Wert 66, C den Wert 67, etc.
Damit kann man schon arbeiten. Will man nun einen einen Buchstaben um Werte verschieben, so berechnet man dessen UTF-Codierung, addiert 5 dazu und wandelt diese Zahl wieder in den Buchstaben um. Die Umwandlung geschieht mit chr()
input_letter = "A"
shift = 5
output_letter = chr(ord(input_letter)+5)
print(output_letter)
Was dann ein F ergibt.
Übung
Wir haben eine geheimen nachricht abgefangen:
RDM NJGGOZI ZIYGDXC HDO ODIFZMAJMBZ WZBDIIZI
Versuche die Nachricht zu entschlüsseln.
Anbei noch ein paar Tipps:
Nehmen wir an wir haben den Buchstaben Z und verschieben den um 5, dann sollte dies ein E ergeben. In der UTF Codierung beudeutet dies aber, das Z mit dem Wert 90 nach dem Shift den Wert 95 hat. Das ist aber nicht mehr im Bereich der normalen Buchstaben. Wir müssen ein E, mit der Codierung 69 erhalten. Das macht man mit dem Modulo-Operator %
:
print(15%10)
Der Modulo-Operator teilt die Zahl durch 10 und gibt den Rest aus, der entsteht. Teilt man 15 durch 10 erhält man 1 Rest 5. Der Modulo-Operator gibt also den Rest 5 zurück.
Das kann man nun nutzen. Wenn man weiss, dass A bei 65 startet, setzt man am besten 65 auf 0, d.h. Z hat dann neu den Wert 25. Addiert man nun 5 so ergibt sich 30. Nun Rechnet man diese Zahl mit Modulo 26, was 4 ergibt. Hier muss man aber wieder den ursprünglichen Wert von A, nämlich 65 zurückrechnen, und dann die 4 addieren, das gibt 69. Die Codierung 69 entspricht dem Buchstaben E. Also Code:
input_letter = "Z"
shift = 5
output_letter = chr((ord(input_letter)-ord("A")+5)%26+ord("A"))
print(output_letter)