Skytale
klartext = 'Skytale'
schlüssel = 3
zeilen = []
# füge für jede Zeile einen leeren Text ein
for i in range(schlüssel):
zeilen.append('')
# verteile die Buchstaben auf die Zeilen
nr = 0
for buchstabe in klartext:
zeilen[nr] = zeilen[nr] + buchstabe
nr = nr + 1
if nr == schlüssel:
nr = 0
# alle Zeilen mit einer neuen Zeile verknüpfen
verschlüsselt = '\n'.join(zeilen)
print(verschlüsselt)
verschlüsselt = '''\
Ste
ka
yl'''
zeilen = verschlüsselt.splitlines()
# die erste Zeile gibt vor, wie viele Spalten es gibt
spalten = len(zeilen[0])
klartext = ''
# für jede Spalte...
for spalte in range(spalten):
# wird in jeder Zeile...
for zeile in zeilen:
if len(zeile) > spalte:
# der Buchstabe in dieser Spalte dem Text hinzugefügt
klartext = klartext + zeile[spalte]
print(klartext)
Polybios
QUADRAT = [
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'K',
'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U',
'E', 'X', 'Y', 'Z', ' '
]
klartext = 'Hallo'
klartext = klartext.upper().replace('J', 'I').replace('V', 'U')
verschlüsselt = ''
for buchstabe in klartext:
index = QUADRAT.index(buchstabe)
spalte = index % 5 # berechnet den ganzzahligen Rest bei einer Division durch 5
zeile = index // 5 # berechnet die ganzzahlige Division durch 5
verschlüsselt = verschlüsselt + f'{zeile + 1}{spalte + 1} '
print(verschlüsselt.strip()) # strip entfernt Leerzeichen an den Rändern
Lesen Sie das Programm durch und versuchen Sie, jede Zeile zu verstehen.
Flicken Sie den Code, so dass der verschlüsselte Text lesbar wird.
QUADRAT = [
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'K',
'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U',
'E', 'X', 'Y', 'Z', ' '
]
verschlüsselt = '35 34 31 53 12 24 34 43'
klartext = ''
zahlen = verschlüsselt.split(' ')
for zahl in zahlen:
zeile = int(zahl[0])
spalte = int(zahl[1])
index = 0
klartext = klartext + QUADRAT[index]
print(klartext)
Wie Sie bemerkt haben, werden in Python Listen mit eckigen Klammern erzeugt - und der Zugriff erfolgt unter Angabe der Position in der Liste, auch wieder mit eckigen Klammern:
Die Positionen in der Liste beginnen bei 0. Das heisst, das erste Element hat die Position 0, das zweite die Position 1, usw.
liste = ['A', 'B', 'C', 'D', 'E']
print(liste[0]) # gibt 'A' aus
print(liste[4]) # gibt 'E' aus
Caesar-Chiffre
ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SCHLÜSSEL = 'D'
ROT = ALPHABET.index(SCHLÜSSEL) # gibt die Position des Schlüsselbuchstabens im Alphabet zurück
# A -> 0, B -> 1, C -> 2, D -> 3, ...
klartext = 'CAESAR'
klartext = klartext.upper() # sicherstellen, dass nur Grossbuchstaben verwendet werden
verschlüsselt = ''
for buchstabe in klartext:
index = ALPHABET.index(buchstabe) + ROT
index = index % 26 # ganzzahliger Rest bei Division durch 26
verschlüsselt = verschlüsselt + ALPHABET[index]
print(verschlüsselt)
Ändern Sie den Code so ab, dass der verschlüsselte Text wieder entschlüsselt werden kann.
ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SCHLÜSSEL = 'D'
ROT = ALPHABET.index(SCHLÜSSEL)
verschlüsselt = 'JDLXV'
klartext = ''
verschlüsselt = verschlüsselt.upper()
for buchstabe in verschlüsselt:
index = 0
klartext = klartext + ALPHABET[index]
print(klartext)
⭐️ Zusatz
Sie haben eine geheime Nachricht abgefangen, kennen aber den Schlüssel nicht. Sie wissen aber, dass ALCZLJ
ein sinnvolles Wort ergeben muss. Schreiben Sie ein Programm, das alle möglichen Schlüssel durchprobiert und jeweils den entschlüsselten Text ausdruckt.
Verwenden Sie die Ausgangslage aus dem obigen Programm.
verschlüsselt = 'ALCZLJ'
Substitutions-Chiffre
ALPHABET = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.split(' ')
SCHLÜSSEL = 'I S X D L Y A V E B F G C W M Z N K O R H Q J P U T'.split(' ')
klartext = 'HEUTE GEHE ICH IM WALD JOGGEN'
klartext = klartext.upper()
verschlüsselt = ''
for buchstabe in klartext:
if buchstabe in ALPHABET:
index = ALPHABET.index(buchstabe)
verschlüsselt = verschlüsselt + SCHLÜSSEL[index]
else:
verschlüsselt = verschlüsselt + buchstabe
print(verschlüsselt)
ALPHABET = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.split(' ')
SCHLÜSSEL = 'I S X D L Y A V E B F G C W M Z N K O R H Q J P U T'.split(' ')
verschlüsselt = 'EXV SEFL QMW CIAAGEWALW WIXV SELG'
verschlüsselt = verschlüsselt.upper()
klartext = ''
for buchstabe in verschlüsselt:
if buchstabe in SCHLÜSSEL:
index = SCHLÜSSEL.index(buchstabe)
klartext = klartext + ALPHABET[index]
else:
klartext = klartext + buchstabe
print(klartext)
from random import shuffle
schlüssel='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.split(' ')
shuffle(schlüssel)
print(' '.join(schlüssel))
⭐️ Antike Verschlüsselung mit Python