Caesar Verschlüsselung codieren

Code-Stücke können hier veröffentlicht werden.
designation_na
User
Beiträge: 2
Registriert: Freitag 20. Januar 2017, 16:13

Caesar Verschlüsselung codieren

Beitragvon designation_na » Freitag 20. Januar 2017, 16:29

Hey :)
ich war grad am arbeiten an einer Caesar Verschlüsselung und bin nun leider auf 2 Probleme gestoßen.
1.) Warum wird bei einem bestimmten Verschiebungsfaktor (ca. 30 - 80) nicht auf die Länge der Nachricht geachtet?
2.) Falls jemand so schlau sein sollte und einen überdimensionalen Verschiebungsfaktor eingibt, brauche ich eine Möglichkeit wieder von vorne anfangen zu zählen. Hat da jemand ne Idee?

  1. def eingabe():
  2.     try:
  3.         code = input("Gebe deinen Code ein: ")
  4.         faktor = int(input("Nenne deinen Verschiebungsfaktor: "))      
  5.     except:
  6.         print("Eine deiner Eingaben war ungültig...\n")
  7.         exit()
  8.     return(code, faktor)
  9.    
  10. def caesar(c, f):
  11.     print("Verschlüsselter Code: ", end="")
  12.     for i in range(len(c)):
  13.         asc = ord(c[i])         # Schritt für Schritt umwandlung in ASCII
  14.         alph = chr(asc + f) # Rückumwandlung mir einberechnung des Verschiebungsfaktors
  15.         print(alph, end= "")
  16.  
  17. cf = eingabe()
  18. caesar(cf[0], cf[1])
Benutzeravatar
pyHoax
User
Beiträge: 84
Registriert: Donnerstag 15. Dezember 2016, 19:17

Re: Caesar Verschlüsselung codieren

Beitragvon pyHoax » Samstag 21. Januar 2017, 00:31

2.) Falls jemand so schlau sein sollte und einen überdimensionalen Verschiebungsfaktor eingibt, brauche ich eine Möglichkeit wieder von vorne anfangen zu zählen. Hat da jemand ne Idee?


chr( (asc + f) % 256)


  1. def caesar(text, f):
  2.     print("Verschlüsselter Code: ", end="")
  3.     for char in text:
  4.         asc = ord(char)         # Schritt für Schritt umwandlung in ASCII
  5.         alph = chr(asc + f) # Rückumwandlung mir einberechnung des Verschiebungsfaktors
  6.         print(alph, end= "")
  7.  
  8. cf = eingabe()
  9. caesar(cf[0], cf[1])

Aber mit der Eingabe aufpassen.. sonderlich wird es wenn keine Ascii zeichen im text sind
designation_na
User
Beiträge: 2
Registriert: Freitag 20. Januar 2017, 16:13

Re: Caesar Verschlüsselung codieren

Beitragvon designation_na » Sonntag 22. Januar 2017, 16:31

vielen Dank an @pyHoax

ich hab nochmal ne überarbeitete Version von dem Code geschrieben:

  1. a = input("Code: ")
  2. b = int(input("Verschiebungsfaktor: "))
  3. print("Verschlüsselter Code: ", end = "")
  4. for i in range(len(a)):
  5.     c = ord(a[i])
  6.     print(chr((c+b)%256), end = "")


Funktioniert sowohl im positiven als auch im negativen Bereich sehr gut!
LG
Sirius3
User
Beiträge: 7044
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Caesar Verschlüsselung codieren

Beitragvon Sirius3 » Sonntag 22. Januar 2017, 17:34

@designation_na: Variablennamen sollten aussagekräftig sein, das ist bei einem Buchstaben im Allgemeinen nicht gegeben. Über den Index einer Sequenz zu iterieren wird in Python als Anti-Pattern angesehen, da man über die Elemente auch direkt iterieren kann:
  1. code = input("Code: ")
  2. shift = int(input("Verschiebungsfaktor: "))
  3. print("Verschlüsselter Code: ", end = "")
  4. for char in code:
  5.     num = ord(char)
  6.     print(chr((num + shift) % 256), end = "")


bzw.

  1. code = input("Code: ")
  2. shift = int(input("Verschiebungsfaktor: "))
  3. encoded = "".join(chr((ord(char) + shift) % 256) for char in code)
  4. print("Verschlüsselter Code:", encoded)
Benutzeravatar
pyHoax
User
Beiträge: 84
Registriert: Donnerstag 15. Dezember 2016, 19:17

Re: Caesar Verschlüsselung codieren

Beitragvon pyHoax » Sonntag 22. Januar 2017, 18:43

@designation_na
War für uns IT Freaks nicht mal eine Übung zum Aufwärmen.
Wenn du uns eine Freude machen willst dann übernehme einiges von dem von mir und Sirius3 verwendeten Python Syntax.
Du iterierst mit der 'for' Schleife über die Indexies (ist das richtig gebeugt ?) um dann einen Lookup mit den den Index über ein Listenelement zu machen.

Das ist unelegannt und auch in Python eine Performamce-Bremse.
Sirius und ich itereieren nicht über den Index der Liste sondern über die Elemente der Liste selber. Und Variablen brauchen den richtigen Namen .. das ist wie beim Rumpelstielchen.. wahre Namen haben Macht !
Mach das in Zukunft genau so und wir Forumengel erfahren instant Karma.

Danke !
ruedi_br
User
Beiträge: 9
Registriert: Montag 11. September 2017, 08:24

Re: Caesar Verschlüsselung codieren

Beitragvon ruedi_br » Dienstag 23. Januar 2018, 10:20

Hallo zusammen,
der Vierzeiler zeigt zwar, wie in Python sparsam codiert werden kann, aber geht etwas an der Schlüsselproblematik vorbei.
Das Beispiel:
Ärgerliches und übles muß probiert werden
wird verschlüsselt zu:
Î|qo|vsmro}*xn*lvo}*wé*z|ylso|~*o|nox
Erkennbar sind Klar- und geschlüsselter Text nicht gleich lang. Bei Cäsar handelt es sich jedoch um eine monoalphabetische Substitution. Und der gute alte Herr Cäsar dürfte lediglich mit Majuskeln unterwegs gewesen sein. Statt Modulo 256 käme da eher eine Konstruktion in Frage, die den Zeichenraum A..Z abbildet (mit Modulo 26), was natürlich bedeutet, den Text prä zu prozessieren, d.h. Leer- Interpunktions- und Sonderzeichen zu strippen, Umlaute und ß auszuschreiben, sowie alles in Großbuchstaben zu wandeln. :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder