Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def default():
- # 2 mal das Alphabet in eine Liste packen
- alphabet = [[chr(i) for i in range(65, 91)], [chr(i)
- for i in range(65, 91)]]
- # die Grundeinstellungen der Rotoren berrechnen
- rotor_1, rotor_2 = rotor_update(alphabet) # die Grundeinstellungen der Rotoren werden festgelegt
- return alphabet, rotor_1, rotor_2 # die Grundeinstellungen werden zurückgegeben
- def rotor_update(alphabet):
- 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]]
- 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]]
- return rotor_1, rotor_2 # die Positionen der Rotoren werden zurückgegeben
- # Grundeinstellungen der Rotoren
- def right_input(input,additional): # prüft, ob die Eingabe korrekt ist
- if len(input) == 0: # wenn die Eingabe leer ist
- print("-"*50)
- print("You have to enter a letter!")
- print("-"*50)
- return False
- if len(input) > 1 and additional: # wenn die Eingabe mehr als ein Zeichen enthält
- print("-"*50)
- print("Please enter only 1 letter!")
- print("-"*50)
- return False
- if not input.isalpha(): # wenn die Eingabe kein Buchstabe ist
- print("-"*50)
- print("Please enter a valid letter!")
- print("-"*50)
- return False
- return True
- def rotor_position(alphabet): # die Positionen der Rotoren werden festgelegt
- for i in range(2):
- position = input(
- f"Enter the position of the {i+1}. rotor (A-Z): ").upper()
- if not right_input(position,additional=True):
- # wird auf Grundeinstellungen zurückgesetzt
- alphabet, rotor_1, rotor_2 = default()
- return rotor_position(alphabet)
- movement = (ord(position) + 65)
- for _ in range(movement): # das Alphabet wird um n Positionen nach links verschoben
- # das Alphabet um eine Stelle nach links schieben
- alphabet[i].append(alphabet[i][0])
- alphabet[i].pop(0)
- return alphabet
- def encrypt_enigma(alphabet, rotor_1, rotor_2, message):
- encrypted_message = ""
- rotor_1, rotor_2 = rotor_update(alphabet)
- for item in message: # der Text wird verschlüsselt
- if item == " ": # wenn es ein Leerzeichen ist, wird es nicht verschlüsselt
- encrypted_message += " "
- continue
- for a in range(len(alphabet[0])):
- if item == alphabet[0][a]:
- temp = rotor_1[a]
- break
- for b in range(len(alphabet[1])):
- if temp == alphabet[1][b]:
- encrypted_message += rotor_2[b]
- break
- for x in range(2): # das Alphabet um eine Stelle nach links schieben
- alphabet[x].append(alphabet[x][0])
- alphabet[x].pop(0)
- rotor_1, rotor_2 = rotor_update(alphabet)
- # die verschlüsselte Nachricht wird ausgegeben
- print(f"Your encrypted_message is: \"{encrypted_message}\"")
- print("-"*50)
- def decrypt_enigma(alphabet, rotor_1, rotor_2, message):
- decrypted_message = ""
- rotor_1, rotor_2 = rotor_update(alphabet)
- for item in message: # der Text wird entschlüsselt
- if item == " ":
- decrypted_message += " "
- continue
- for a in range(len(rotor_1)):
- if item == alphabet[1][a]:
- temp = rotor_2[a]
- break
- for b in range(len(rotor_2)):
- if temp == alphabet[0][b]:
- decrypted_message += rotor_1[b]
- break
- for x in range(2): # das Alphabet um eine Stelle nach links schieben
- alphabet[x].append(alphabet[x][0])
- alphabet[x].pop(0)
- rotor_1, rotor_2 = rotor_update(alphabet)
- # die entschlüsselte Nachricht wird ausgegeben
- print(f"Your decrypted_message is: \"{decrypted_message}\"")
- print("-"*50)
- def main(): # die Hauptfunktion
- while True: # die Abfrage, ob das Programm beendet werden soll
- # die Grundeinstellungen werden festgelegt
- alphabet, rotor_1, rotor_2 = default()
- # die Positionen der Rotoren werden festgelegt
- alphabet = rotor_position(alphabet)
- choice = input(
- "Do you want to encrypt, decript or leave? (E/D/X): ").upper() # die Abfrage, was geschehen soll
- if not right_input(choice,additional=True): # die Abfrage, ob die Eingabe korrekt ist
- continue
- if choice == "E": # wenn die Nachricht verschlüsselt werden soll
- print("-"*50)
- print("Encrypting...")
- # die Nachricht wird eingelesen
- message = input("Enter the message: ").upper()
- if not right_input(message,additional=False):
- continue
- encrypt_enigma(alphabet, rotor_1, rotor_2, message)
- elif choice == "D": # wenn die Nachricht entschlüsselt werden soll
- print("-"*50)
- print("Decrypt...")
- # die Nachricht wird eingelesen
- message = input("Enter the message: ").upper()
- if not right_input(message,additional=False):
- continue
- decrypt_enigma(alphabet, rotor_1, rotor_2, message)
- elif choice == "X": # wenn das Programm beendet werden soll
- print("-"*50)
- print("Goodbye!")
- break
- else: # wenn die Eingabe nicht korrekt ist
- print("-"*50)
- print("Wrong input!")
- print("-"*50)
- if __name__ == "__main__": # wenn das Programm direkt ausgeführt wird
- main()
Advertisement
Add Comment
Please, Sign In to add comment