【Python使用Tkinter进行消息编码和解码】先决条件:Tkinter的基础
Python提供了多种开发GUI(图形用户界面)的选项。在所有GUI方法中, tkinter是最常用的方法。它是Python随附的Tk GUI工具包的标准Python接口。带有tkinter的Python输出了创建GUI应用程序的最快, 最简单的方法。
Python提供了Tkinter工具包来开发GUI应用程序。现在, 取决于开发人员的想象力或必要性, 他/她想使用此工具包进行开发的内容。让我们尝试根据Vigenère密码实现消息加密/解密应用程序, 该应用程序可以使用密钥加密消息, 并可以使用同一密钥解密加密的哈希。
Modules used in the project :Tkinter->
GUI toolkit
time
datetime
base64->
Vigenère cipher
下面是上述想法的实现:
# 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()
输出:
加密窗口–
文章图片
解密窗口–
文章图片
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python模块介绍和用法示例
- Python Tkinter使用Canvas类创建不同的形状
- Python Tkinter使用Canvas类创建不同类型的线
- Python Tkinter Entry小部件用法实例
- Python Tkinter无框窗口用法示例
- 二进制方式部署k8s集群(超详细)
- #yyds干货盘点# 如何挑选合适的 Kubernetes 存储插件((09))
- Linux之watch命令
- #yyds干货盘点#使用线程安全型双向链表实现简单 LRU Cache 模拟