个性化阅读
专注于IT技术分析

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 |使用Tkinter进行消息编码-解码1

解密窗口–

Python |使用Tkinter进行消息编码-解码2

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0) 打赏
未经允许不得转载:srcmini » Python使用Tkinter进行消息编码和解码
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏