Geocrack

enigma_without_fool_protection

Jul 21st, 2022 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.92 KB | None | 0 0
  1.  
  2. def default():
  3.     # 2 mal das Alphabet in eine Liste packen
  4.     alphabet = [[chr(i) for i in range(65, 91)], [chr(i)
  5.                                                   for i in range(65, 91)]]
  6.     # die Grundeinstellungen der Rotoren berrechnen
  7.     rotor_1, rotor_2 = rotor_update(alphabet)
  8.     return alphabet, rotor_1, rotor_2
  9.  
  10.  
  11. def rotor_update(alphabet):
  12.     rotor_1 = [alphabet[0][7],alphabet[0][2],alphabet[0][1],alphabet[0][6],alphabet[0][10],alphabet[0][8],alphabet[0][3],alphabet[0][0],alphabet[0][5],alphabet[0][11],alphabet[0][4],alphabet[0][9],alphabet[0][15],alphabet[0][20],alphabet[0][17],alphabet[0][12],alphabet[0][18],alphabet[0][14],alphabet[0][16],alphabet[0][24],alphabet[0][13],alphabet[0][25],alphabet[0][23],alphabet[0][22],alphabet[0][19],alphabet[0][21]]
  13.     rotor_2 = [alphabet[1][5],alphabet[1][3],alphabet[1][8],alphabet[1][1],alphabet[1][6],alphabet[1][0],alphabet[1][4],alphabet[1][9],alphabet[1][2],alphabet[1][7],alphabet[1][12],alphabet[1][14],alphabet[1][10],alphabet[1][16],alphabet[1][11],alphabet[1][23],alphabet[1][13],alphabet[1][18],alphabet[1][17],alphabet[1][24],alphabet[1][22],alphabet[1][25],alphabet[1][20],alphabet[1][15],alphabet[1][19],alphabet[1][21]]    
  14.     return rotor_1, rotor_2
  15. # Grundeinstellungen der Rotoren
  16.  
  17.  
  18. def rotor_position(alphabet):  # die Positionen der Rotoren werden festgelegt
  19.     for i in range(2):
  20.         position = input(
  21.             f"Enter the position of the {i+1}. rotor (A-Z): ").upper()
  22.         movement = (ord(position) + 65)
  23.         for _ in range(movement):  # das Alphabet wird um n Positionen nach links verschoben
  24.             # das Alphabet um eine Stelle nach links schieben
  25.             alphabet[i].append(alphabet[i][0])
  26.             alphabet[i].pop(0)
  27.     return alphabet
  28.  
  29.  
  30. def encrypt_enigma(alphabet, rotor_1, rotor_2, message):
  31.     encrypted_message = ""
  32.     rotor_1, rotor_2 = rotor_update(alphabet)
  33.     for item in message:  # der Text wird verschlüsselt
  34.         if item == " ": # wenn es ein Leerzeichen ist, wird es nicht verschlüsselt
  35.             encrypted_message += " "
  36.             continue
  37.  
  38.         for a in range(len(alphabet[0])):
  39.             if item == alphabet[0][a]:
  40.                 temp = rotor_1[a]
  41.                 break
  42.  
  43.         for b in range(len(alphabet[1])):
  44.             if temp == alphabet[1][b]:
  45.                 encrypted_message += rotor_2[b]
  46.                 break
  47.  
  48.         for x in range(2):  # das Alphabet um eine Stelle nach links schieben
  49.             alphabet[x].append(alphabet[x][0])
  50.             alphabet[x].pop(0)
  51.         rotor_1, rotor_2 = rotor_update(alphabet)
  52.  
  53.     # die verschlüsselte Nachricht wird ausgegeben
  54.     print(f"Your encrypted_message is: \"{encrypted_message}\"")
  55.     print("-"*50)
  56.  
  57.  
  58. def decrypt_enigma(alphabet, rotor_1, rotor_2, message):
  59.     decrypted_message = ""
  60.     rotor_1, rotor_2 = rotor_update(alphabet)
  61.  
  62.     for item in message:  # der Text wird entschlüsselt
  63.         if item == " ":
  64.             decrypted_message += " "
  65.             continue
  66.  
  67.         for a in range(len(rotor_1)):
  68.             if item == alphabet[1][a]:
  69.                 temp = rotor_2[a]
  70.                 break
  71.  
  72.         for b in range(len(rotor_2)):
  73.             if temp == alphabet[0][b]:
  74.                 decrypted_message += rotor_1[b]
  75.                 break
  76.  
  77.         for x in range(2):  # das Alphabet um eine Stelle nach links schieben
  78.             alphabet[x].append(alphabet[x][0])
  79.             alphabet[x].pop(0)
  80.             rotor_1, rotor_2 = rotor_update(alphabet)
  81.  
  82.     # die entschlüsselte Nachricht wird ausgegeben
  83.     print(f"Your decrypted_message is: \"{decrypted_message}\"")
  84.     print("-"*50)
  85.  
  86.  
  87. def main():  # die Hauptfunktion
  88.     while True:  # die Abfrage, ob das Programm beendet werden soll
  89.         # die Grundeinstellungen werden festgelegt
  90.         alphabet, rotor_1, rotor_2 = default()
  91.         # die Positionen der Rotoren werden festgelegt
  92.         alphabet = rotor_position(alphabet)
  93.         choice = input(
  94.             "Do you want to encrypt, decript or leave? (E/D/X): ").upper()  # die Abfrage, was geschehen soll
  95.         print("-"*50)
  96.         if choice == "E":  # wenn die Nachricht verschlüsselt werden soll
  97.             print("Encrypting...")
  98.             # die Nachricht wird eingelesen
  99.             message = input("Enter the message: ").upper()
  100.             encrypt_enigma(alphabet, rotor_1, rotor_2, message)
  101.         elif choice == "D":  # wenn die Nachricht entschlüsselt werden soll
  102.             print("Decrypt...")
  103.             # die Nachricht wird eingelesen
  104.             message = input("Enter the message: ").upper()
  105.             decrypt_enigma(alphabet, rotor_1, rotor_2, message)
  106.         elif choice == "X":  # wenn das Programm beendet werden soll
  107.             print("Goodbye!")
  108.             break
  109.         else: # wenn die Eingabe nicht korrekt ist
  110.             print("Wrong input!")
  111.  
  112.  
  113. if __name__ == "__main__":  # wenn das Programm direkt ausgeführt wird
  114.     main()
  115.  
Add Comment
Please, Sign In to add comment