Snippet content copied to clipboard.
Are you sure to delete this snippet? No, don't delete
  1. import base64
  2. import hashlib
  3. from Crypto import Random
  4. from Crypto.Cipher import AES
  5. import tkinter as tk
  6. class AESCipher:
  7. def __init__(self, key):
  8. self.bs = AES.block_size
  9. self.key = hashlib.sha256(key.encode()).digest()
  10. def encrypt(self, raw):
  11. raw = self._pad(raw)
  12. iv = Random.new().read(AES.block_size)
  13. cipher = AES.new(self.key, AES.MODE_CBC, iv)
  14. return base64.b64encode(iv + cipher.encrypt(raw.encode()))
  15. def decrypt(self, enc):
  16. enc = base64.b64decode(enc)
  17. iv = enc[:AES.block_size]
  18. cipher = AES.new(self.key, AES.MODE_CBC, iv)
  19. return AESCipher._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')
  20. def _pad(self, s):
  21. return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
  22. @staticmethod
  23. def _unpad(s):
  24. return s[:-ord(s[len(s)-1:])]
  25. def encrypt_text():
  26. key = key_entry.get()
  27. message = message_entry.get("1.0", tk.END)
  28. cipher = AESCipher(key)
  29. encrypted_message = cipher.encrypt(message)
  30. result_text.delete("1.0", tk.END)
  31. result_text.insert(tk.END, encrypted_message.decode())
  32. def decrypt_text():
  33. key = key_entry.get()
  34. message = message_entry.get("1.0", tk.END)
  35. cipher = AESCipher(key)
  36. decrypted_message = cipher.decrypt(message)
  37. result_text.delete("1.0", tk.END)
  38. result_text.insert(tk.END, decrypted_message)
  39. root = tk.Tk()
  40. root.title("AES-256 Encryption/Decryption")
  41. key_label = tk.Label(root, text="Enter encryption key:")
  42. key_label.pack()
  43. key_entry = tk.Entry(root, width=50)
  44. key_entry.pack()
  45. message_label = tk.Label(root, text="Enter message to encrypt/decrypt:")
  46. message_label.pack()
  47. message_entry = tk.Text(root, height=10, width=50)
  48. message_entry.pack()
  49. encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_text)
  50. encrypt_button.pack()
  51. decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_text)
  52. decrypt_button.pack()
  53. result_label = tk.Label(root, text="Result:")
  54. result_label.pack()
  55. result_text = tk.Text(root, height=10, width=50)
  56. result_text.pack()
  57. root.mainloop()

Edit this Snippet