Prerequisite : Basics of Tkinter
Python offers multiple options for developing GUI (Graphical User Interface). Out of all the GUI methods, tkinter is most commonly used method. It is a standard Python interface to the Tk GUI toolkit shipped with Python. Python with tkinter outputs the fastest and easiest way to create the GUI applications.
Python provides the Tkinter toolkit to develop GUI applications. Now, it’s upto the imagination or necessity of developer, what he/she want to develop using this toolkit. Let’s try to implement a message encryption-decryption application according to the Vigenère cipher, which can encrypt the message using the key and can decrypt the encrypted hash using same key.
Modules used in the project :
- Tkinter -> GUI toolkit
- time
- datetime
- base64 -> Vigenère cipher
Below is the implementation of above idea :
# import tkinter module from tkinter import * # import other necessery modules import random import time import datetime # creating root object root = Tk() # defining size of window root.geometry("1200x6000") # setting up the title of window root.title("Message Encryption and Decryption") Tops = Frame(root, width = 1600, relief = SUNKEN) Tops.pack(side = TOP) f1 = Frame(root, width = 800, height = 700, relief = SUNKEN) f1.pack(side = LEFT) # ============================================== # TIME # ============================================== localtime = time.asctime(time.localtime(time.time())) lblInfo = Label(Tops, font = ('helvetica', 50, 'bold'), text = "SECRET MESSAGING \n Vigenère cipher", fg = "Black", bd = 10, anchor='w') lblInfo.grid(row = 0, column = 0) lblInfo = Label(Tops, font=('arial', 20, 'bold'), text = localtime, fg = "Steel Blue", bd = 10, anchor = 'w') lblInfo.grid(row = 1, column = 0) rand = StringVar() Msg = StringVar() key = StringVar() mode = StringVar() Result = StringVar() # exit function def qExit(): root.destroy() # Function to reset the window def Reset(): rand.set("") Msg.set("") key.set("") mode.set("") Result.set("") # reference lblReference = Label(f1, font = ('arial', 16, 'bold'), text = "Name:", bd = 16, anchor = "w") lblReference.grid(row = 0, column = 0) txtReference = Entry(f1, font = ('arial', 16, 'bold'), textvariable = rand, bd = 10, insertwidth = 4, bg = "powder blue", justify = 'right') txtReference.grid(row = 0, column = 1) # labels lblMsg = Label(f1, font = ('arial', 16, 'bold'), text = "MESSAGE", bd = 16, anchor = "w") lblMsg.grid(row = 1, column = 0) txtMsg = Entry(f1, font = ('arial', 16, 'bold'), textvariable = Msg, bd = 10, insertwidth = 4, bg = "powder blue", justify = 'right') txtMsg.grid(row = 1, column = 1) lblkey = Label(f1, font = ('arial', 16, 'bold'), text = "KEY", bd = 16, anchor = "w") lblkey.grid(row = 2, column = 0) txtkey = Entry(f1, font = ('arial', 16, 'bold'), textvariable = key, bd = 10, insertwidth = 4, bg = "powder blue", justify = 'right') txtkey.grid(row = 2, column = 1) lblmode = Label(f1, font = ('arial', 16, 'bold'), text = "MODE(e for encrypt, d for decrypt)", bd = 16, anchor = "w") lblmode.grid(row = 3, column = 0) txtmode = Entry(f1, font = ('arial', 16, 'bold'), textvariable = mode, bd = 10, insertwidth = 4, bg = "powder blue", justify = 'right') txtmode.grid(row = 3, column = 1) lblService = Label(f1, font = ('arial', 16, 'bold'), text = "The Result-", bd = 16, anchor = "w") lblService.grid(row = 2, column = 2) txtService = Entry(f1, font = ('arial', 16, 'bold'), textvariable = Result, bd = 10, insertwidth = 4, bg = "powder blue", justify = 'right') txtService.grid(row = 2, column = 3) # Vigenère cipher import base64 # Function to encode def encode(key, clear): enc = [] for i in range(len(clear)): key_c = key[i % len(key)] enc_c = chr((ord(clear[i]) + ord(key_c)) % 256) enc.append(enc_c) return base64.urlsafe_b64encode("".join(enc).encode()).decode() # Function to decode def decode(key, enc): dec = [] enc = base64.urlsafe_b64decode(enc).decode() for i in range(len(enc)): key_c = key[i % len(key)] dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256) dec.append(dec_c) return "".join(dec) def Ref(): print("Message= ", (Msg.get())) clear = Msg.get() k = key.get() m = mode.get() if (m == 'e'): Result.set(encode(k, clear)) else: Result.set(decode(k, clear)) # Show message button btnTotal = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black", font = ('arial', 16, 'bold'), width = 10, text = "Show Message", bg = "powder blue", command = Ref).grid(row = 7, column = 1) # Reset button btnReset = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black", font = ('arial', 16, 'bold'), width = 10, text = "Reset", bg = "green", command = Reset).grid(row = 7, column = 2) # Exit button btnExit = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black", font = ('arial', 16, 'bold'), width = 10, text = "Exit", bg = "red", command = qExit).grid(row = 7, column = 3) # keeps window alive root.mainloop() |
Output :
Encrypt Window –

Decrypt Window –

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.
Recommended Posts:
- Create a Yes/No Message Box in Python using tkinter
- Python Tkinter - Message
- Send message to FB friend using Python
- Send message to Telegram user using Python
- How To Encode And Decode A Message using Python?
- Send Direct Message On Instagram using Selenium in Python
- Message Boxes using PyAutoGUI
- Python | Issue Warning Message
- Python | Prompt for Password at Runtime and Termination with Error Message
- Python Program that Sends And Recieves Message from Client
- Python PyQt5 – How to change font and size of Status Bar Message
- Python EasyGUI - Message Box
- hmac - Keyed-Hashing for Message Authentication
- PyQt5 – Set status bar message in window
- Color game using Tkinter in Python
- Python | Simple registration form using Tkinter
- Python | Simple GUI calculator using Tkinter
- Python | Distance-time GUI calculator using Tkinter
- Python | Random Password Generator using Tkinter
- Python | Real time currency convertor using Tkinter
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

