Python :: Aufgabe #23
5 Lösungen
Mit Caesar Chiffre ent- und verschlüsseln
Anfänger - Python
von Dome
- 03.01.2013 um 01:30 Uhr
Schreiben Sie ein Programm, indem Sie mit Hilfe der Caesar Chiffre einen beliebigen Text ent- und verschlüsseln können. Zuvor muss der Text und die Anzahl der Verschiebung angegeben werden. Groß- und Kleinschreibung muss nicht beachtet werden.
Konsolenausgabe:
Geben Sie den Text ein: Beispielwort
Um wie viele Stellen soll verschoben werden: 1
Ergebnis: Cfjtqjfmxpsu
Lösungen:
#Verschiebung um x Stellen
print
x = int(input('Um wieviele Stellen soll das Alphabet verschoben werden? '))
t = input('Einen Text zum Verschluesseln/Entschluesseln eingeben: ')
#Umwandlung in eine Liste
l = list(t)
#Umwandlungvorschrift der eingegeben Buchstaben (mithilfe eines Dictionaries)
d = { "a":0 , "b":1 , "c":2 , "d":3 , "e":4 ,
"f":5 , "g":6 , "h":7 , "i":8 , "j":9 ,
"k":10, "l":11, "m":12, "n":13, "o":14,
"p":15, "q":16, "r":17, "s":18, "t":19,
"u":20, "v":21, "w":22, "x":23, "y":24, "z":25 }
#Umwandlungsvorschrift der Zahlen in Buchstaben
e = { 0 :"a", 1 :"b", 2 :"c", 3 :"d", 4 :"e",
5 :"f", 6 :"g", 7 :"h", 8 :"i", 9 :"j",
10:"k", 11:"l", 12:"m", 13:"n", 14:"o",
15:"p", 16:"q", 17:"r", 18:"s", 19:"t",
20:"u", 21:"v", 22:"w", 23:"x", 24:"y", 25:"z" }
#Verschluesselung
#Leere Hilfsliste definieren
m = []
#Verschluesselung der einzelnen Buchstaben mit 'while'-Schleife
i = 0
while i < len(l):
m.append(e[(d[l[i]] + x)%26])
i = i + 1
#Hilfsstring definieren
s = ""
#Ausgabe als Textblock
j=0
while j < len(m):
s = s + m[j]
j = j + 1
#Die entgültige Ausgabe
print
print ("Dies ist der Geheimtext: " +s)
import string
liste = []
klein = string.ascii_lowercase
gross = string.ascii_uppercase
wort = input("Text: ")
verschiebung = int(input("Verschiebung: "))
for i in range(len(wort)):
if wort[i] in klein:
index = klein.find(wort[i])
umwandlung = klein[(index + verschiebung)%26]
liste.append(umwandlung)
elif wort[i] in gross:
index = gross.find(wort[i])
umwandlung = gross[(index + verschiebung)%26]
liste.append(umwandlung)
else:
liste.append(wort[i])
chiffre = ''.join(liste[i] for i in range(len(liste)))
print("Ergebnis:", chiffre)
# -*- coding: utf-8 -*-
b = ["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"]
print "Verschlüsseln: v"
print "Entschlüsseln: e"
x = 0
while x < 1:
auswahl = raw_input("\nAuswahl: ")
if auswahl != "v" and auswahl != 'e':
print "\nBitte entweder 'v' oder 'e' eingeben!"
else:
x = 1
# Verschlüsselung
if auswahl == "v":
eingabe = raw_input("\nBitte das zu verschlüsselnde Wort eingeben: ").lower()
rot = input("Stellenanzahl für Verschiebung: ")
chiffre = ""
x = 0
while x < len(eingabe):
# Position des Buchstaben ermitteln
indexBuchstabe = b.index(eingabe[x])
# Position nach Verschiebung ermitteln
if indexBuchstabe + rot > 25:
indexBuchstabe_ab_anfang = (indexBuchstabe + rot) % 26
chiffre = chiffre + b[indexBuchstabe_ab_anfang]
else:
chiffre = chiffre + b[indexBuchstabe + rot]
x = x + 1
print "\nVerschiebung um " + str(rot) + " Stellen ergibt den \
Begriff: " + chiffre
# Entschlüsselung
else:
eingabe = raw_input("\nBitte das zu entschlüsselnde Wort eingeben: ").lower()
rot = input("Stellenanzahl für Verschiebung: ")
dechiffre = ""
x = 0
while x < len(eingabe):
indexBuchstabe = b.index(eingabe[x])
if indexBuchstabe + rot > 25:
indexBuchstabe_ab_anfang = (indexBuchstabe - rot) % 26
dechiffre = dechiffre + b[indexBuchstabe_ab_anfang]
else:
dechiffre = dechiffre + b[indexBuchstabe - rot]
x = x + 1
print "\nVerschiebung um " + str(rot) + " Stellen ergibt den \
Begriff: " + dechiffre
def make_chiffre(rot):
chiffre = {}
for i in range (ord('a'), ord('z')) :
chiffre[chr(i)] = chr( (i + rot - ord('a')) % 26 + ord('a'))
for i in range (ord('A'), ord('Z')) :
chiffre[chr(i)] = chr( (i + rot - ord('A')) % 26 + ord('A'))
return chiffre;
def encrypt(txt, rot) :
chiffre = make_chiffre(rot)
return ''.join([chiffre[i] if i in chiffre else i for i in txt ] )
txt = input('\nPlease enter text to encrypt\n')
rot = int(input('\nPlease enter rotation (int), negative value means decrypt \n'))
encrypt(txt, rot)
abcgross="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
abcklein="abcdefghijklmnopqrstuvwxyz"
txt=input("Bitte zu kodierenden Text eingeben:")
r=0
while r>26 or r<1:
r=int(input("Um wieviele Stellen soll verschoben werden?(1-26) "))
atxt=""
warn=0
warntxt=""
for i in txt:
if i==" ":
atxt=atxt+" "
continue
if i.upper() not in abcgross:
atxt=atxt+i #nicht codierbare Zeichen direkt zur Ausgabe bitte!
warn=warn+1
warntxt=warntxt+i+","
continue
if i == i.upper():
abc=abcgross
if i == i.lower():
abc=abcklein
abcl=len(abc)
for j in range(abcl):
if i==abc[j]:
if j+r>=abcl:
atxt=atxt+abc[j+r-abcl]
else:
atxt=atxt+abc[j+r]
print("Codierter Text:",atxt)
if warn > 0:
print("Achtung! folgende im Text enthaltenen Zeichen wurden nicht kodiert:",warntxt[:-1])
