前面有粉丝加更关于用界面做软件的请求,今天就和大家分享一个关于用Python调用tkinker写一个带界面的RSA加密小工具的小案例。

一、环境准备

假如环境中没有tkinker和rsa模块的要自行使用pip命令安装缺的模块。

python密文解密工具_开发语言

编写Python脚本的IDE可以自行选择,我安装的是Python3.7,习惯使用的是pycharm。大家也可以根据自己的喜好选择相应的IDE,比如vscode就有很多开发者喜欢用,也支持多语言版本。

python密文解密工具_Python基础_02

二、编写程序

1.设定编码模式,导入依赖库。tkinter库用来做界面,rsa库拿来做rsa加密解密,base64可以拿来编码和解码。

# -*- coding: utf-8 -*-
import tkinter as tk
import base64
import rsa

2.生成公钥和私钥,并保存到当前目录。

# 秘钥的位数, 可以自定义指定, 例如: 128、256、512、1024、2048等
(pubkey, privkey) = rsa.newkeys(2048)
# 生成公钥
pub = pubkey.save_pkcs1()
# 将公钥保存到文件中
with open('public.pem', 'wb') as f:
    f.write(pub)
# 生成私钥
pri = privkey.save_pkcs1()
# 将私钥保存到文件中
with open('private.pem', 'wb') as f:
    f.write(pri)

3.定义Rsa类,类内定义好加密和解密函数。然后调用类实例化。

#定义Rsa类
class Rsa():
    def __init__(self):
        self.pub_key = rsa.PublicKey.load_pkcs1(pub)
        self.priv_key = rsa.PrivateKey.load_pkcs1(pri)
    #加密方法
    def encrypt(self, text):
        # rsa加密 最后把加密字符串转为base64
        text = text.encode("utf-8")
        cryto_info = rsa.encrypt(text, self.pub_key)
        cipher_base64 = base64.b64encode(cryto_info)  # 输出的为byte类型的base64
        cipher_base64 = cipher_base64.decode()  # 转为str类型的base64
        return cipher_base64
    #解密方法
    def decrypt(self, text):
        # rsa解密 返回解密结果
        cryto_info = base64.b64decode(text)  # 将base64转为二进制byte字节
        talk_real = rsa.decrypt(cryto_info, self.priv_key)
        res = talk_real.decode("utf-8")
        return res
#调用Rsa类初始化实例对象
rsaer = Rsa()

4.定义加密解密按钮响应事件,点击加密按钮的时候,调用加密事件,清空输出文本框,调用rsaer的加密方法给获取的输入文本框的内容加密,并把加密内容写到输出文本框。点击解密按钮的时候,调用解密事件,清空输出文本框,调用rsaer的解密方法给获取的输入文本框的内容解密,并把解密内容写到输出文本框。

#加密按钮响应事件
def encode_click():
    out_entry.delete('1.0', 'end')  # 清空文本
    out_entry.insert('end', '加密结果:\n'+rsaer.encrypt(in_entry.get('1.0', 'end')))#调用加密方法加密
#解密按钮响应事件
def decode_click():
    out_entry.delete('1.0', 'end')  # 清空文本
    out_entry.insert('end','解密结果:\n'+ rsaer.decrypt(in_entry.get('1.0', 'end')))#调用解密方法解密

5.编写软件界面,主要涉及文本标签Label、文本框Text和按钮Button的调用,以及pack排版方式和place排版方式。pack排版是会随着拉伸变换位置的,而且不那么灵活。place排版是固定位置排版,位置不会随着拉伸动,但是根据坐标排版比较灵活。还有一种gird布局方式,是网格排版。大家也可以自己去动手试试。这篇推文就不讲了。

# 创建主窗口
window = tk.Tk()
window.title("Money哥RSA加密解密器")

# 添加标签
label = tk.Label(window, height=4, width=100,text="请输入需要加密或者解密的内容:")
label.pack()#使用pack()进行布局排版

# 添加文本框
in_entry = tk.Text(window, height=15, width=100)
in_entry.pack()

# 添加标签
label = tk.Label(window,height=4, width=100,text="输出内容:")
label.pack()

# 添加文本框
out_entry = tk.Text(window, height=15, width=100)
out_entry.pack()

# 添加按钮
button = tk.Button(window,height=2, width=5, text="加密", command=encode_click)
button.place(x=550,y=600)

# 添加按钮
button = tk.Button(window, height=2, width=5,text="解密", command=decode_click)
button.place(x=600,y=600)#使用place()进行布局排版

# 启动主循环
window.mainloop()

界面效果:

python密文解密工具_Python学习_03