Code: Alles auswählen
def meisteletter (Str): #herausfinden welcher buchstabe am oeftesten vorkommt
Str=Str.upper()
anzahl=0
hoechsterbuchstabe=[]
for letter in ['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']:
if letter in Ausnahmen:
continue
Strlist=list(Str)
anzahl2=Strlist.count(letter)
if anzahl<anzahl2:
anzahl=anzahl2
hoechsterbuchstabe=[letter]
elif anzahl==anzahl2: #wenn buchstaben gleich oft vorkommen
hoechsterbuchstabe.append(letter)
return hoechsterbuchstabe
def Entschluesslung(buchstabenauswahl,code):
code=code.upper()
for letter in buchstabenauswahl:
differenz=ord(letter)-ord('E') #verschiebung herausfinden
if differenz<0:
differenz+=26
if differenz in mydifferenzen: #wenn schon gemacht
continue
else:
mydifferenzen.append(differenz)
realtext='Hier der entschluesselte Text: \n'
for i in code:
if not i in ['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',]: #sonderzeichen etc so lassen
realasci=ord(i)
else:
realasci=ord(i)-differenz
if realasci<ord('A'):
realasci+=26
realtext=realtext+chr(realasci)
print realtext
antwort=raw_input('Stimmt dieser Text?(y/n): ')
if antwort=='y':
print 'Die Verschiebung betraegt: ' +str(differenz)
return realtext
return None
codiert=raw_input('Geben Sie den codierten Text ein: ')
Ausnahmen=[]
oeftesterbuchstabe=meisteletter(codiert)
mydifferenzen=[]
for i in oeftesterbuchstabe:
Ausnahmen.append(i)
a=Entschluesslung(oeftesterbuchstabe,codiert)
if a==None:
zweitoeftesterbuchstabe=meisteletter(codiert)
a=Entschluesslung(zweitoeftesterbuchstabe,codiert)
if a==None:
print 'Jetzt hilft nur noch Brute-Force!'
a=Entschluesslung(['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'],codiert)
if a==None:
print ' Der Code ist nicht per Caesar codiert'