2017-06-20 4 views
1
def caesar_decrypt(s,n): 
    s1="" 
    m = n % 26 if n > 26 else n 
    for c in s: 
     if c.isalpha(): 
      x = ord(c) - m 
      if c.islower(): 
      c = chr(x + 26) if x < ord('a') else chr(x) 
      elif c.isupper(): 
      c = chr(x + 26) if x < ord('A') else chr(x) 
     s1 += c 
    return s1 

def brute_force_decrypt(ciphertext): 
    for i in range(1,27): 
     d=caesar_decrypt(ciphertext,i) 
     print (i,d) 
brute_force_decrypt(open('text.txt').read()) 

Also, mein Code macht einen guten Job, aber ich möchte den Code in eine Funktion namens brute_force_decrypt (Chiffretext) gesetzt werden. Ich bin mir nicht sicher, wie ich die beiden Funktionen, die ich habe, kombinieren kann. Ich brauche Hilfe.Caesar-Chiffre Brute-Force in eine Funktion

+0

Der eigentliche Trick besteht darin, in den Code zu bestimmen sind, wenn die korrekte Entschlüsselung gefunden wurde. – zaph

Antwort

2

Nicht, eine Funktion ist am besten, wenn es eine Sache macht und gut benannt ist.

Erstellen Sie stattdessen eine andere Funktion, die jede dieser Funktionen aufruft.

Je weniger in einer Funktion, desto einfacher zu verstehen und desto geringer ist die Wahrscheinlichkeit eines Fehlers.

1

Sie können den Code von caesar_decrypt(s,n) in brute_force_decrypt(ciphertext)

def brute_force_decrypt(ciphertext): 
    for n in range(1,27): 
     s1="" 
     m = n % 26 if n > 26 else n 
     for c in ciphertext: 
      if c.isalpha(): 
       x = ord(c) - m 
       if c.islower(): 
       c = chr(x + 26) if x < ord('a') else chr(x) 
       elif c.isupper(): 
       c = chr(x + 26) if x < ord('A') else chr(x) 
      s1 += c 
     d = s1 
     print (n,d) 
brute_force_decrypt(open('text.txt').read()) 

(Beachten Sie die Änderung in der Variablen i-n)

+0

Dann bekomme ich einen Fehler. NameError: Name 's' ist nicht definiert –

+0

@New_to_python Beachten Sie, dass es schwieriger ist zu sehen, was jetzt passiert. Auch bessere beschreibende Variablennamen erleichtern es, zu begründen, was passiert. – zaph

+0

@New_to_python Bearbeitete den Code. Nicht mehr "s". Ersetzt mit 'ciphertext' – nikpod