一个没啥用的小工具【加解密工具】

218 阅读9分钟

一个没啥用的小工具=>加解密工具

用Python+Qt6写了一个不是很有用的小工具
主要功能是对几种加密算法使用GUI进行显示,包含base64、md5、凯撒、AES。此处不分析算法原理。
编程逻辑使用面向对象方式

使用库

PyQt6、Crypto、base64、hashlib

GUI实现

使用PyQt6作为GUI库,进行UI显示
显示框架为左侧列表+右侧容器操作框

左侧列表实现

# 创建左侧导航栏  
nav_list = QListWidget() # list组件  
nav_list.addItem(QListWidgetItem(QIcon(), 'bse64'))  
nav_list.addItem(QListWidgetItem(QIcon(), 'md5'))  
nav_list.addItem(QListWidgetItem(QIcon(), '凯撒'))  
nav_list.addItem(QListWidgetItem(QIcon(), 'AES'))  
nav_list.setFixedWidth(100)  
# 事件关联
nav_list.currentItemChanged.connect(self.switchPage)
# 页面选择方法
def switchPage(self, current):  
if current:  
    selected_index = self.centralWidget().layout().itemAt(0).widget().currentRow()  
    self.centralWidget().layout().itemAt(1).widget().setCurrentIndex(selected_index)

右侧容器实现

# 创建右侧多页面容器  
page_container = QStackedWidget()  
# 页面示例化  
page1 = base64Tool()  
page2 = md5Tool()  
page3 = kaisaTool()  
page4 = aesTool()  
# 添加组件 
page_container.addWidget(page1)  
page_container.addWidget(page2)  
page_container.addWidget(page3)  
page_container.addWidget(page4)

加解密

加解密使用Python库实现,此工具不手搓加解密算法
右侧容器GUI实现,使用Python面向对象的编程方法,编写QWidget窗口

base64

UI实现

def initUI(self):
    self.setGeometry(0, 0, 600, 500)  
    # 大标题  
    lab_title = QLabel('Base64 加密/解密', self) # 实例化标签  
    lab_title.resize(100, 50) # 设置标签大小  
    lab_title.setFont(QFont('Arial', 60, QFont.Weight.Bold)) # 设置字体字号  
    lab_title.setAlignment(Qt.AlignmentFlag.AlignCenter) # 文本在标签内居中  
    # 按钮  
    self.btn_en = QPushButton('加密')  
    self.btn_de = QPushButton('解密')  
    # 编辑框  
    self.text_en = QLineEdit() # 单行文本编辑框  
    self.text_de = QLineEdit()  
    self.text_en.setText('')  
    self.text_de.setText('')  
    # 显示框  
    self.showtext_en = QTextEdit()  
    self.showtext_en.setFixedHeight(120)  
    self.showtext_en.setPlainText('')  
    self.showtext_en.setReadOnly(True)  
    self.showtext_de = QTextEdit()  
    self.showtext_de.setFixedHeight(120)  
    self.showtext_de.setPlainText('')  
    self.showtext_de.setReadOnly(True)  
    # 水平布局加密编辑框和btn  
    henbox = QHBoxLayout()  
    henbox.addWidget(self.text_en)  
    henbox.addWidget(self.btn_en)  
    # 水平布局解密编辑框和btn  
    hdebox = QHBoxLayout()  
    hdebox.addWidget(self.text_de)  
    hdebox.addWidget(self.btn_de)  
    # 垂直布局  
    vbox = QVBoxLayout()  
    vbox.addSpacing(10)  
    vbox.addWidget(lab_title)  
    vbox.addLayout(henbox)  
    vbox.addSpacing(5)  
    vbox.addWidget(self.showtext_en)  
    vbox.addSpacing(5)  
    vbox.addLayout(hdebox)  
    vbox.addSpacing(5)  
    vbox.addWidget(self.showtext_de)  
    vbox.addStretch(1)  
    vbox.addSpacing(10)  
    self.setLayout(vbox)  
    # 事件关联  
    self.btn_en.clicked.connect(self.base64encode)  
    self.btn_de.clicked.connect(self.base64decode)

算法实现

使用base64库的b64encode、b64decode进行字节的加解密

def base64encode(self):  
    # 从UI获取字符  
    string = self.text_en.text()  
    # 字符编码转译  
    transfer = string.encode("utf-8")  
    en = base64.b64encode(transfer).decode()  
    # 显示字符  
    self.showtext_en.setPlainText(en)  
  
def base64decode(self):  
    # 从UI获取字符  
    string = self.text_de.text()  
    transfer = string.encode()  
    # 字符编码转译  
    de = base64.b64decode(transfer).decode("utf-8")  
    # 显示字符  
    self.showtext_de.setPlainText(de)

MD5

GUI实现方法与base64相识不在赘述

算法实现

借助hashlib库实现MD5加密,解密需要密文字典,小作者没这能力,也不知道有没有share的佬?

def md5encode(self):  
    string = self.text_en.text()  
    transfer = string.encode("utf-8")  
    # hexdigest 16进制表示  
    en = hashlib.md5(transfer).hexdigest()  
    self.showtext_en.setPlainText(en)

凯撒

算法实现

凯撒没找着现成库,手搓吧 凯撒的加解密思想很简单,就是利用字符表,然后进行位数偏移(左/右),偏移量就是加解密的key,有能者还可以自己写一个字符字典或是长字符串用来作为字符表,此处直接使用ASCII作为字符表。

def kaisa_encode(self):  
# 获取key  
key = self.key  
# 获取加密文本  
text = self.text_en.text()  
# 字符串作为加密后的新变量  
string = ''  
for item in text:  
# 字符转ASCII进行右偏移加密  
asc = ord(item) + key % 128  
# 字符码超出范围时进行回环计算  
if asc > 128:  
asc = asc - 128  
# 转译并拼接密文  
string += chr(asc)  
self.showtext_en.setPlainText(string)  
  
# 凯撒解密  
def kaisa_decode(self):  
# 获取key  
key = self.key  
# 获取解密文本  
text = self.text_de.text()  
# 字符串作为加密后的新变量  
string = ''  
for item in text:  
# 字符转ASCII进行左偏移解密  
asc = ord(item) - key % 128  
# 字符码超出范围时进行回环计算  
if asc < 0:  
asc = asc + 128  
# 转译并拼接密文  
string += chr(asc)  
self.showtext_de.setPlainText(string)

凯撒的加密思想可以进行拓展,凯撒的加密思想是在一维的基础上进行偏移加密,咱可以手搓或是通过程序搓一个二维的数据参考基础,形成二维的偏移密钥进行加解密,实现复杂一丢丢的偏移加密。

AES

AES作为盛行的对称加密算法,数据加密常用

算法实现

AES两种加密模式,ECB、CBC
ECB模式加密,不需要IV
CBC模式需要IV

def aes_encode(self):  
    # 获取key  
    key = self.key.encode()  
    # 判断有无IV选择加密方式  
    if self.IV == '' or self.IV == None:  
    # 生成AES对象,ECB类型加密  
    aes_text = AES.new(key, AES.MODE_ECB)  
    # 转码加密  
    encode = aes_text.encrypt(self.text_en.text().encode())  
    # 使用base64转码  
    en = base64.b64encode(encode).decode()  
    # UI显示  
    self.showtext_en.setText(en)  
    else:  
    IV = self.IV.encode()  
    # 生成AES对象,CBC类型加密,含有IV  
    aes_text = AES.new(key, AES.MODE_CBC, IV)  
    # 转码加密  
    encode = aes_text.encrypt(self.text_en.text().encode())  
    # 使用base64转码  
    en = base64.b64encode(encode).decode()  
    # UI显示  
    self.showtext_en.setText(en)  
  
# AES解密  实现逻辑与加密相似
def aes_decode(self):  
    # 获取key  
    key = self.key.encode()  
    if self.IV == '' or self.IV == None:  
    aes_text = AES.new(key, AES.MODE_ECB)  
    # 使用base64转码  
    transfer = base64.b64decode(self.text_de.text().encode())  
    # 解密解码  
    de = aes_text.decrypt(transfer).decode()  
    self.showtext_de.setText(de)  
    else:  
    IV = self.IV.encode()  
    aes_text = AES.new(key, AES.MODE_CBC, IV)  
    # 使用base64转码  
    transfer = base64.b64decode(self.text_de.text().encode())  
    # 解密解码  
    de = aes_text.decrypt(transfer).decode()  
    self.showtext_de.setText(de)

完整代码

import base64  
import hashlib  
  
from Crypto.Cipher import AES  
from PyQt6.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QListWidget, QWidget, QStackedWidget, QLabel, \  
QListWidgetItem, QPushButton, QVBoxLayout, QTextEdit, QLineEdit  
from PyQt6.QtGui import QIcon, QFont, QIntValidator  
from PyQt6.QtCore import Qt  
  
  
class codeTools(QMainWindow):  
    def __init__(self):  
    super().__init__()  
    self.initUI()  
    self.center()  

    def initUI(self):  
        self.setGeometry(0, 0, 800, 600)  
        self.setWindowTitle('codeTools')  

        # 创建一个主窗口部件  
        central_widget = QWidget()  
        self.setCentralWidget(central_widget)  

        # 创建左侧导航栏  
        nav_list = QListWidget() # list组件  
        nav_list.addItem(QListWidgetItem(QIcon(), 'bse64'))  
        nav_list.addItem(QListWidgetItem(QIcon(), 'md5'))  
        nav_list.addItem(QListWidgetItem(QIcon(), '凯撒'))  
        nav_list.addItem(QListWidgetItem(QIcon(), 'AES'))  
        nav_list.setFixedWidth(100)  
        # 事件关联  
        nav_list.currentItemChanged.connect(self.switchPage)  

        # 创建右侧多页面容器  
        page_container = QStackedWidget()  
        # 页面示例化  
        page1 = base64Tool()  
        page2 = md5Tool()  
        page3 = kaisaTool()  
        page4 = aesTool()  
        # 添加组件  
        page_container.addWidget(page1)  
        page_container.addWidget(page2)  
        page_container.addWidget(page3)  
        page_container.addWidget(page4)  

        # 创建布局管理器  
        layout = QHBoxLayout()  
        layout.addWidget(nav_list)  
        layout.addWidget(page_container)  

        central_widget.setLayout(layout)  

    # 窗口居中  
    def center(self):  
        win_rect = self.frameGeometry() # 窗口矩形(QRect类)  
        scr_center = self.screen().availableGeometry().center() # 屏幕中心  
        win_rect.moveCenter(scr_center) # 窗口矩形中心移动到屏幕中心  
        self.move(win_rect.topLeft()) # 移动窗口和窗口矩形重合  

    # 页面选择方法  
    def switchPage(self, current):  
        if current:  
            selected_index = self.centralWidget().layout().itemAt(0).widget().currentRow()  
            self.centralWidget().layout().itemAt(1).widget().setCurrentIndex(selected_index)  
  
  
class base64Tool(QWidget):  
  
    def __init__(self):  
        super().__init__()  
        self.initUI()  

    def initUI(self):  
        self.setGeometry(0, 0, 600, 500)  
        # 大标题  
        lab_title = QLabel('Base64 加密/解密', self) # 实例化标签  
        lab_title.resize(100, 50) # 设置标签大小  
        lab_title.setFont(QFont('Arial', 60, QFont.Weight.Bold)) # 设置字体字号  
        lab_title.setAlignment(Qt.AlignmentFlag.AlignCenter) # 文本在标签内居中  
        # 按钮  
        self.btn_en = QPushButton('加密')  
        self.btn_de = QPushButton('解密')  
        # 编辑框  
        self.text_en = QLineEdit() # 单行文本编辑框  
        self.text_de = QLineEdit()  
        self.text_en.setText('')  
        self.text_de.setText('')  
        # 显示框  
        self.showtext_en = QTextEdit()  
        self.showtext_en.setFixedHeight(120)  
        self.showtext_en.setPlainText('')  
        self.showtext_en.setReadOnly(True)  
        self.showtext_de = QTextEdit()  
        self.showtext_de.setFixedHeight(120)  
        self.showtext_de.setPlainText('')  
        self.showtext_de.setReadOnly(True)  
        # 水平布局加密编辑框和btn  
        henbox = QHBoxLayout()  
        henbox.addWidget(self.text_en)  
        henbox.addWidget(self.btn_en)  
        # 水平布局解密编辑框和btn  
        hdebox = QHBoxLayout()  
        hdebox.addWidget(self.text_de)  
        hdebox.addWidget(self.btn_de)  
        # 垂直布局  
        vbox = QVBoxLayout()  
        vbox.addSpacing(10)  
        vbox.addWidget(lab_title)  
        vbox.addLayout(henbox)  
        vbox.addSpacing(5)  
        vbox.addWidget(self.showtext_en)  
        vbox.addSpacing(5)  
        vbox.addLayout(hdebox)  
        vbox.addSpacing(5)  
        vbox.addWidget(self.showtext_de)  
        vbox.addStretch(1)  
        vbox.addSpacing(10)  
        self.setLayout(vbox)  
        # 事件关联  
        self.btn_en.clicked.connect(self.base64encode)  
        self.btn_de.clicked.connect(self.base64decode)  

    def base64encode(self):  
        # 从UI获取字符  
        string = self.text_en.text()  
        # 字符编码转译  
        transfer = string.encode("utf-8")  
        en = base64.b64encode(transfer).decode()  
        # 显示字符  
        self.showtext_en.setPlainText(en)  

    def base64decode(self):  
        # 从UI获取字符  
        string = self.text_de.text()  
        transfer = string.encode()  
        # 字符编码转译  
        de = base64.b64decode(transfer).decode("utf-8")  
        # 显示字符  
        self.showtext_de.setPlainText(de)  
  
  
class md5Tool(QWidget):  
    def __init__(self):  
        super().__init__()  
        self.initUI()  
  
    def initUI(self):  
        self.setGeometry(0, 0, 600, 500)  
        # 大标题  
        lab_title = QLabel('MD5 加密', self) # 实例化标签  
        lab_title.resize(100, 50) # 设置标签大小  
        lab_title.setFont(QFont('Arial', 60, QFont.Weight.Bold)) # 设置字体字号  
        lab_title.setAlignment(Qt.AlignmentFlag.AlignCenter) # 文本在标签内居中  
        # 按钮  
        self.btn_en = QPushButton('加密')  
        # 编辑框  
        self.text_en = QLineEdit() # 单行文本编辑框  
        self.text_en.setText('')  
        # 显示框  
        self.showtext_en = QTextEdit()  
        self.showtext_en.setFixedHeight(120)  
        self.showtext_en.setPlainText('')  
        self.showtext_en.setReadOnly(True)  
        # 水平布局加密编辑框和btn  
        henbox = QHBoxLayout()  
        henbox.addWidget(self.text_en)  
        henbox.addWidget(self.btn_en)  
        # 垂直布局  
        vbox = QVBoxLayout()  
        vbox.addSpacing(10)  
        vbox.addWidget(lab_title)  
        vbox.addLayout(henbox)  
        vbox.addSpacing(5)  
        vbox.addWidget(self.showtext_en)  
        vbox.addStretch(1)  
        vbox.addSpacing(10)  
        self.setLayout(vbox)  

        self.btn_en.clicked.connect(self.md5encode)  

    def md5encode(self):  
        string = self.text_en.text()  
        transfer = string.encode("utf-8")  
        # hexdigest 16进制表示  
        en = hashlib.md5(transfer).hexdigest()  
        self.showtext_en.setPlainText(en)  

  
class kaisaTool(QWidget):  
    key = 8  

    def __init__(self):  
    super().__init__()  
    self.initUI()  

    def initUI(self):  
    self.setGeometry(0, 0, 600, 500)  
    # self.setWindowTitle('base64')  

    # 大标题  
    lab_title = QLabel('凯撒 加密/解密', self) # 实例化标签  
    lab_title.resize(100, 50) # 设置标签大小  
    lab_title.setFont(QFont('Arial', 60, QFont.Weight.Bold)) # 设置字体字号  
    lab_title.setAlignment(Qt.AlignmentFlag.AlignCenter) # 文本在标签内居中  
    lab_currentkey = QLabel('当前偏移密钥', self)  
    lab_editkey = QLabel('修改偏移密钥', self)  
    # 按钮  
    self.btn_key = QPushButton('确认偏移密钥')  
    self.btn_en = QPushButton('加密')  
    self.btn_de = QPushButton('解密')  
    # 编辑框  
    self.text_key = QLineEdit() # 单行文本编辑框  
    # 创建一个整数验证器  
    int_validator = QIntValidator()  
    self.text_key.setValidator(int_validator)  
    self.text_en = QLineEdit()  
    self.text_de = QLineEdit()  
    self.text_en.setText('')  
    self.text_de.setText('')  
    # 显示框  
    self.showtext_key = QLineEdit()  
    self.showtext_key.setText(str(self.key))  
    self.showtext_key.setReadOnly(True)  
    self.showtext_en = QTextEdit()  
    self.showtext_en.setFixedHeight(120)  
    self.showtext_en.setPlainText('')  
    self.showtext_en.setReadOnly(True)  
    self.showtext_de = QTextEdit()  
    self.showtext_de.setFixedHeight(120)  
    self.showtext_de.setPlainText('')  
    self.showtext_de.setReadOnly(True)  
    # 水平布局偏移密钥编辑框、显示框和btn  
    hkeybox = QHBoxLayout()  
    hkeybox.addWidget(lab_currentkey)  
    hkeybox.addSpacing(1)  
    hkeybox.addWidget(self.showtext_key)  
    hkeybox.addSpacing(1)  
    hkeybox.addWidget(lab_editkey)  
    hkeybox.addSpacing(1)  
    hkeybox.addWidget(self.text_key)  
    hkeybox.addWidget(self.btn_key)  
    # 水平布局加密编辑框和btn  
    henbox = QHBoxLayout()  
    henbox.addWidget(self.text_en)  
    henbox.addWidget(self.btn_en)  
    # 水平布局解密编辑框和btn  
    hdebox = QHBoxLayout()  
    hdebox.addWidget(self.text_de)  
    hdebox.addWidget(self.btn_de)  
    # 垂直布局  
    vbox = QVBoxLayout()  
    vbox.addSpacing(10)  
    vbox.addWidget(lab_title)  
    vbox.addSpacing(5)  
    vbox.addLayout(hkeybox)  
    vbox.addSpacing(5)  
    vbox.addLayout(henbox)  
    vbox.addSpacing(5)  
    vbox.addWidget(self.showtext_en)  
    vbox.addSpacing(5)  
    vbox.addLayout(hdebox)  
    vbox.addSpacing(5)  
    vbox.addWidget(self.showtext_de)  
    vbox.addStretch(1)  
    vbox.addSpacing(10)  
    self.setLayout(vbox)  

    self.btn_en.clicked.connect(self.kaisa_encode)  
    self.btn_de.clicked.connect(self.kaisa_decode)  
    self.btn_key.clicked.connect(self.setkey)  

    # 设置密钥  
    def setkey(self):  
    self.key = int(self.text_key.text())  
    self.showtext_key.setText(self.text_key.text())  

    # 凯撒加密  
    def kaisa_encode(self):  
        # 获取key  
        key = self.key  
        # 获取加密文本  
        text = self.text_en.text()  
        # 字符串作为加密后的新变量  
        string = ''  
        for item in text:  
            # 字符转ASCII进行右偏移加密  
            asc = ord(item) + key % 128  
            # 字符码超出范围时进行回环计算  
            if asc > 128:  
                asc = asc - 128  
                # 转译并拼接密文  
                string += chr(asc)  
        self.showtext_en.setPlainText(string)  

    # 凯撒解密  
    def kaisa_decode(self):  
        # 获取key  
        key = self.key  
        # 获取解密文本  
        text = self.text_de.text()  
        # 字符串作为加密后的新变量  
        string = ''  
        for item in text:  
            # 字符转ASCII进行左偏移解密  
            asc = ord(item) - key % 128  
            # 字符码超出范围时进行回环计算  
            if asc < 0:  
                asc = asc + 128  
                # 转译并拼接密文  
                string += chr(asc)  
        self.showtext_de.setPlainText(string)  
  
  
class aesTool(QWidget):  
    key = ''  
    IV = ''  

    def __init__(self):  
        super().__init__()  
        self.initUI()  

    def initUI(self):  
        self.setGeometry(0, 0, 600, 500)  
        # self.setWindowTitle('base64')  
        # 大标题  
        lab_title = QLabel('AES 加密/解密', self) # 实例化标签  
        lab_title.resize(100, 50) # 设置标签大小  
        lab_title.setFont(QFont('Arial', 60, QFont.Weight.Bold)) # 设置字体字号  
        lab_title.setAlignment(Qt.AlignmentFlag.AlignCenter) # 文本在标签内居中  
        lab_currentkey = QLabel('当前密钥', self)  
        lab_editkey = QLabel('修改密钥(字符16的倍数)', self)  
        lab_IV = QLabel('当前IV')  
        lab_editIV = QLabel('修改IV(字符8的倍数)')  
        # 按钮  
        self.btn_key = QPushButton('确认密钥')  
        self.btn_IV = QPushButton('确认IV')  
        self.btn_en = QPushButton('加密')  
        self.btn_de = QPushButton('解密')  
        # 编辑框  
        self.text_key = QLineEdit() # 单行文本编辑框  
        self.text_IV = QLineEdit()  
        self.text_en = QLineEdit()  
        self.text_de = QLineEdit()  
        self.text_en.setText('')  
        self.text_de.setText('')  
        # 显示框  
        self.showtext_key = QLineEdit()  
        self.showtext_IV = QLineEdit()  
        self.showtext_key.setText(str(self.key))  
        self.showtext_key.setText(None)  
        self.showtext_IV.setText(None)  
        self.showtext_key.setReadOnly(True)  
        self.showtext_IV.setReadOnly(True)  
        self.showtext_en = QTextEdit()  
        self.showtext_en.setFixedHeight(120)  
        self.showtext_en.setPlainText('')  
        self.showtext_en.setReadOnly(True)  
        self.showtext_de = QTextEdit()  
        self.showtext_de.setFixedHeight(120)  
        self.showtext_de.setPlainText('')  
        self.showtext_de.setReadOnly(True)  
        # 水平布局key\IV显示  
        hshow = QHBoxLayout()  
        hshow.addWidget(lab_currentkey)  
        hshow.addWidget(self.showtext_key)  
        hshow.addWidget(lab_IV)  
        hshow.addWidget(self.showtext_IV)  
        # 水平布局key\IV编辑框和btn  
        heditbox = QHBoxLayout()  
        heditbox.addWidget(lab_editkey)  
        heditbox.addSpacing(1)  
        heditbox.addWidget(self.text_key)  
        heditbox.addWidget(self.btn_key)  
        heditbox.addSpacing(1)  
        heditbox.addWidget(lab_editIV)  
        heditbox.addWidget(self.text_IV)  
        heditbox.addSpacing(1)  
        heditbox.addWidget(self.btn_IV)  
        # 水平布局加密编辑框和btn  
        henbox = QHBoxLayout()  
        henbox.addWidget(self.text_en)  
        henbox.addWidget(self.btn_en)  
        # 水平布局解密编辑框和btn  
        hdebox = QHBoxLayout()  
        hdebox.addWidget(self.text_de)  
        hdebox.addWidget(self.btn_de)  
        # 垂直布局  
        vbox = QVBoxLayout()  
        vbox.addSpacing(10)  
        vbox.addWidget(lab_title)  
        vbox.addSpacing(5)  
        vbox.addLayout(hshow)  
        vbox.addSpacing(5)  
        vbox.addLayout(heditbox)  
        vbox.addSpacing(5)  
        vbox.addLayout(henbox)  
        vbox.addSpacing(5)  
        vbox.addWidget(self.showtext_en)  
        vbox.addSpacing(5)  
        vbox.addLayout(hdebox)  
        vbox.addSpacing(5)  
        vbox.addWidget(self.showtext_de)  
        vbox.addStretch(1)  
        vbox.addSpacing(10)  
        self.setLayout(vbox)  

        self.btn_en.clicked.connect(self.aes_encode)  
        self.btn_de.clicked.connect(self.aes_decode)  
        self.btn_key.clicked.connect(self.setkey)  
        self.btn_IV.clicked.connect(self.setIV)  

    # 设置密钥  
    def setkey(self):  
        self.key = self.text_key.text()  
        self.showtext_key.setText(self.key)  
        self.text_key.setText('')  

    # 设置IV  
    def setIV(self):  
        self.IV = self.text_IV.text()  
        self.showtext_IV.setText(self.IV)  
        self.text_IV.setText('')  

    # AES加密  
    def aes_encode(self):  
        # 获取key  
        key = self.key.encode()  
        # 判断有无IV选择加密方式  
        if self.IV == '' or self.IV == None:  
            # 生成AES对象,ECB类型加密  
            aes_text = AES.new(key, AES.MODE_ECB)  
            # 转码加密  
            encode = aes_text.encrypt(self.text_en.text().encode())  
            # 使用base64转码  
            en = base64.b64encode(encode).decode()  
            # UI显示  
            self.showtext_en.setText(en)  
        else:  
            IV = self.IV.encode()  
            # 生成AES对象,CBC类型加密,含有IV  
            aes_text = AES.new(key, AES.MODE_CBC, IV)  
            # 转码加密  
            encode = aes_text.encrypt(self.text_en.text().encode())  
            # 使用base64转码  
            en = base64.b64encode(encode).decode()  
            # UI显示  
            self.showtext_en.setText(en)  

    # AES解密  
    def aes_decode(self):  
    # 获取key  
    key = self.key.encode()  
    if self.IV == '' or self.IV == None:  
    aes_text = AES.new(key, AES.MODE_ECB)  
    # 使用base64转码  
    transfer = base64.b64decode(self.text_de.text().encode())  
    # 解密解码  
    de = aes_text.decrypt(transfer).decode()  
    self.showtext_de.setText(de)  
    else:  
    IV = self.IV.encode()  
    aes_text = AES.new(key, AES.MODE_CBC, IV)  
    # 使用base64转码  
    transfer = base64.b64decode(self.text_de.text().encode())  
    # 解密解码  
    de = aes_text.decrypt(transfer).decode()  
    self.showtext_de.setText(de)  


if __name__ == '__main__':  
    app = QApplication([])  
    ex = codeTools()  
    ex.show()  
    app.exec()

新人作者,首次发帖,不足之处,请多指正,能改则改,不能当没看见。^▽^