Python Caeser Entschlüsselung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
vans666
User
Beiträge: 1
Registriert: Donnerstag 28. Januar 2021, 10:11

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
Benutzeravatar
Dennis89
User
Beiträge: 1551
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

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)
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
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@vans666: was macht der Vergleich neuezahl > ord("Z") und was bedeutet das auf Deine klartext-Zeichen?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.

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.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@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:

Code: Alles auswählen

KLARTEXT = "abcdefghijklmnopqrstuvwxyz"
print("".join(chr(ord("a") + (ord(c) - ord("a") + 13) % 26) for c in KLARTEXT))
Wenn der Text auch Großbuchstaben, Leerzeichen, Satzzeichen und Sonderzeichen beinhalten soll, wird es etwas aufwendiger.
Zuletzt geändert von kbr am Donnerstag 28. Januar 2021, 13:02, insgesamt 1-mal geändert.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.
Benutzeravatar
Dennis89
User
Beiträge: 1551
Registriert: Freitag 11. Dezember 2020, 15:13

@Janki Ups, Danke.
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten