Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Enigma</title>
- <link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
- <script defer src="https://pyscript.net/latest/pyscript.js"></script>
- </head>
- <body>
- <py-script>
- from js import prompt
- import asyncio
- def default():
- alphabet = [[chr(i) for i in range(65, 91)], [chr(i)
- for i in range(65, 91)]]
- rotor_1, rotor_2 = rotor_update(alphabet)
- return alphabet, rotor_1, rotor_2
- 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
- def right_prompt(prompt,additional):
- if len(prompt) == 0:
- prompt("You have to enter a letter!")
- return False
- if len(prompt) > 1 and additional:
- prompt("Please enter only 1 letter!")
- return False
- if not prompt.isalpha():
- prompt("Please enter a valid letter!")
- return False
- return True
- def rotor_position(alphabet):
- for i in range(2):
- position = prompt(
- f"Enter the position of the {i+1}. rotor (A-Z): ").upper()
- if not right_prompt(position,additional=True):
- alphabet, rotor_1, rotor_2 = default()
- return rotor_position(alphabet)
- movement = (ord(position) + 65)
- for _ in range(movement):
- 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:
- if item == " ":
- 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):
- alphabet[x].append(alphabet[x][0])
- alphabet[x].pop(0)
- rotor_1, rotor_2 = rotor_update(alphabet)
- prompt(f"Your encrypted_message is: \"{encrypted_message}\"")
- def decrypt_enigma(alphabet, rotor_1, rotor_2, message):
- decrypted_message = ""
- rotor_1, rotor_2 = rotor_update(alphabet)
- for item in message:
- 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):
- alphabet[x].append(alphabet[x][0])
- alphabet[x].pop(0)
- rotor_1, rotor_2 = rotor_update(alphabet)
- prompt(f"Your decrypted_message is: \"{decrypted_message}\"")
- def main():
- while True:
- alphabet, rotor_1, rotor_2 = default()
- alphabet = rotor_position(alphabet)
- choice = prompt(
- "Do you want to encrypt, decript or leave? (E/D/X): ").upper()
- if not right_prompt(choice,additional=True):
- continue
- if choice == "E":
- message = prompt("Enter the message: ").upper()
- if not right_prompt(message,additional=False):
- continue
- encrypt_enigma(alphabet, rotor_1, rotor_2, message)
- elif choice == "D":
- message = prompt("Enter the message: ").upper()
- if not right_prompt(message,additional=False):
- continue
- decrypt_enigma(alphabet, rotor_1, rotor_2, message)
- elif choice == "X":
- prompt("Goodbye!")
- break
- else:
- prompt("Wrong prompt!")
- if __name__ == "__main__":
- main()
- </py-script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment