python代码:创建一个界面调库并实现DES和AES代码
时间: 2023-06-11 14:08:44 浏览: 137
重庆大学大数据与软件学院信息安全导论作业-python实现S-DES/AES算法提高GUI加解密+源代码+文档说明
5星 · 资源好评率100%
你可以使用 PyQt5 库来创建界面,使用 PyCryptodome 库来实现 DES 和 AES 加密解密。
下面是实现 DES 和 AES 加密解密的 Python 代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QComboBox, QPlainTextEdit
from Crypto.Cipher import DES, AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建主窗口
self.setWindowTitle("DES 和 AES 加密解密")
self.setGeometry(200, 200, 800, 600)
# 创建主窗口的中心部件
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
# 创建主窗口的布局
self.layout = QVBoxLayout(self.central_widget)
# 创建 DES 和 AES 切换按钮和下拉框
self.mode_layout = QHBoxLayout()
self.mode_label = QLabel("选择加密模式:")
self.mode_combo = QComboBox()
self.mode_combo.addItems(["DES", "AES"])
self.mode_button = QPushButton("切换")
self.mode_button.clicked.connect(self.toggle_mode)
self.mode_layout.addWidget(self.mode_label)
self.mode_layout.addWidget(self.mode_combo)
self.mode_layout.addWidget(self.mode_button)
self.layout.addLayout(self.mode_layout)
# 创建输入框和输出框
self.input_layout = QVBoxLayout()
self.input_label = QLabel("输入:")
self.input_edit = QPlainTextEdit()
self.input_layout.addWidget(self.input_label)
self.input_layout.addWidget(self.input_edit)
self.layout.addLayout(self.input_layout)
self.output_layout = QVBoxLayout()
self.output_label = QLabel("输出:")
self.output_edit = QPlainTextEdit()
self.output_edit.setReadOnly(True)
self.output_layout.addWidget(self.output_label)
self.output_layout.addWidget(self.output_edit)
self.layout.addLayout(self.output_layout)
# 创建加密解密按钮
self.button_layout = QHBoxLayout()
self.encrypt_button = QPushButton("加密")
self.encrypt_button.clicked.connect(self.encrypt)
self.decrypt_button = QPushButton("解密")
self.decrypt_button.clicked.connect(self.decrypt)
self.button_layout.addWidget(self.encrypt_button)
self.button_layout.addWidget(self.decrypt_button)
self.layout.addLayout(self.button_layout)
# 默认使用 DES 加密
self.mode = DES.MODE_ECB
self.key_size = 8
# 切换加密模式
def toggle_mode(self):
if self.mode_combo.currentText() == "DES":
self.mode = DES.MODE_ECB
self.key_size = 8
elif self.mode_combo.currentText() == "AES":
self.mode = AES.MODE_ECB
self.key_size = 16
# 加密
def encrypt(self):
# 获取输入文本
plaintext = self.input_edit.toPlainText().encode("utf-8")
# 生成随机密钥
key = get_random_bytes(self.key_size)
# 创建加密器
if self.mode == DES.MODE_ECB:
cipher = DES.new(key, self.mode)
elif self.mode == AES.MODE_ECB:
cipher = AES.new(key, self.mode)
# 加密
ciphertext = cipher.encrypt(pad(plaintext, cipher.block_size))
# 显示输出
self.output_edit.setPlainText(f"密钥:{key.hex()}\n密文:{ciphertext.hex()}")
# 解密
def decrypt(self):
# 获取输入文本
ciphertext = bytes.fromhex(self.input_edit.toPlainText())
# 获取密钥
key = bytes.fromhex(self.output_edit.toPlainText().split("\n")[0].split(":")[1])
# 创建解密器
if self.mode == DES.MODE_ECB:
cipher = DES.new(key, self.mode)
elif self.mode == AES.MODE_ECB:
cipher = AES.new(key, self.mode)
# 解密
plaintext = unpad(cipher.decrypt(ciphertext), cipher.block_size)
# 显示输出
self.output_edit.setPlainText(plaintext.decode("utf-8"))
if __name__ == "__main__":
# 创建应用程序
app = QApplication(sys.argv)
# 创建主窗口
window = MainWindow()
window.show()
# 运行应用程序
sys.exit(app.exec_())
```
在界面上,你可以选择使用 DES 或 AES 加密模式,输入要加密的文本,点击“加密”按钮会生成随机密钥并加密文本,显示出密钥和密文。你也可以输入密文和密钥,点击“解密”按钮会解密文本,显示出明文。
阅读全文