Seite 1 von 1

Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 10:28
von vans666
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

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 12:15
von Dennis89
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

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 12:27
von Sirius3
@vans666: was macht der Vergleich neuezahl > ord("Z") und was bedeutet das auf Deine klartext-Zeichen?

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 12:32
von Jankie
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.

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 12:57
von kbr
@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.

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 13:01
von Jankie
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.

Re: Python Caeser Entschlüsselung

Verfasst: Donnerstag 28. Januar 2021, 20:31
von Dennis89
@Janki Ups, Danke.