Hallo zusammen
ich habe mir überlegt einmal ein "Verschlüsselungsprogramm" zu erstellen. Dies hat soweit so gut funktioniert. Aber leider bin ich ein bisschen aufgeschmissen mit der Entschlüsselung, da es dort nicht wirklich aufgeht mit den richtigen Buchstaben.
klartext = "abcdefghijklmnopqrstuvwxyz"
geheimtext=""
for zeichen in klartext:
zahl= ord(zeichen)
neuezahl = zahl + 4
if neuezahl > ord("Z"):
neuezahl = neuezahl - 26
neuesZeichen = chr(neuezahl)
geheimtext = geheimtext + neuesZeichen
print(geheimtext)
# "Entschlüsselung"
geheimtext = "KLMNOPQRSTUVWXYZ[\]^_`abcd"
klartext=""
for zeichen in geheimtext:
zahl = ord(zeichen)
neuezahl = zahl -4
if neuezahl > ord("Z"):
neuezahl = neuezahl -26
if neuezahl > ord("A"):
neuezahl = neuezahl +26
neuesZeichen = chr(neuezahl)
klartext = klartext + neuesZeichen
print(klartext)
Der unten eingegebene geheimtext ist einfach das Alphabet. Wenn der Geheimtext aber entschlüsselt wird, so kommen anstelle von u,v,w,x,y,z A\]^_` heraus. Vielleicht kann mir ja jemand weiterhelfen
Python Caeser Entschlüsselung
Hallo,
ich habe deinen Code nur in Hinblick auf dein Beispiel angepasst.
Das war wahrscheinlich nur ein kleiner Denkfehler von dir. Aber in wie weit das ganze robust läuft mit beliebigen EIngaben habe ich aus zeitlichen Gründen nicht getestet.
Grüße
Dennis
ich habe deinen Code nur in Hinblick auf dein Beispiel angepasst.
Code: Alles auswählen
klartext = "abcdefghijklmnopqrstuvwxyz"
geheimtext=""
for zeichen in klartext:
zahl= ord(zeichen)
neuezahl = zahl + 4
if neuezahl > ord("Z"):
neuezahl = neuezahl - 26
neuesZeichen = chr(neuezahl)
geheimtext = geheimtext + neuesZeichen
print(geheimtext)
# "Entschlüsselung"
geheimtext = "KLMNOPQRSTUVWXYZ[\]^_`abcd"
klartext=""
for zeichen in geheimtext:
zahl = ord(zeichen)
if zahl < ord("Z"):
neuezahl = zahl +22
else:
neuezahl = zahl +22
neuesZeichen = chr(neuezahl)
klartext = klartext + neuesZeichen
print(klartext)
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Mit einer Listcomprehansion lässt sich der Code von Dennis89 dann noch auf wenige Zeilen beschränken, ob so die Caeser Verschlüsselung funktioniert weiß ich aber nicht, damit habe ich mich nicht befasst.
Anmerkung an Dennis89:
Bei dem von dir überarbeiteten Code ist der if und Else Zweig gleich.
Code: Alles auswählen
KLARTEXT = "abcdefghijklmnopqrstuvwxyz"
print("".join([chr(ord(zeichen) +4 -26 ) for zeichen in KLARTEXT if ord(zeichen) + 4 > ord("Z")]))
Anmerkung an Dennis89:
Bei dem von dir überarbeiteten Code ist der if und Else Zweig gleich.
@Jankie: Wenn Du Deinen Code laufen lässt, kannst Du sehen, dass es nicht funktioniert – denn Cäsar ist korrekterweise ja rotation. Auch der Vergleich "if ord(zeichen) + 4 > ord("Z")" ist bei Kleinbuchstaben als Zeichen stets wahr. Hier ein Beispiel, wie es für Kleinbuchstaben funktioniert:
Wenn der Text auch Großbuchstaben, Leerzeichen, Satzzeichen und Sonderzeichen beinhalten soll, wird es etwas aufwendiger.
Code: Alles auswählen
KLARTEXT = "abcdefghijklmnopqrstuvwxyz"
print("".join(chr(ord("a") + (ord(c) - ord("a") + 13) % 26) for c in KLARTEXT))
Zuletzt geändert von kbr am Donnerstag 28. Januar 2021, 13:02, insgesamt 1-mal geändert.
Ich habe nur den Code von Dennis89 zum verschlüsseln übernommen und den verkürzt, um die funktionsweise einer List comprehension zu zeigen, bei beiden Codes kam bei dem vorgebenen Klartext das selbe Ergebnis raus. Habe ja extra dazugeschreiben, dass ich keine Ahnung von der Caeser Verschlüsselung habe.