目录
图形界面代码部分
# This Python file uses the following encoding: utf-8
import json
import sys
from pathlib import Path
from secrets import token_bytes
from PySide6.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QLineEdit, QFileDialog, QProgressBar, \
QComboBox, QLabel
from utils import sm4_cbc_encrypt, sm4_cbc_decrypt
import uuid
class Widget(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.key = None
self.decrypted = None
self.line_label3 = None
self.encrypt = None
self.dencrypt_file_btn = None
self.encrypt_file_btn = None
self.pass_edit = None
self.key_edit = None
self.line_label2 = None
self.line_label = None
self.line_file_edit = None
self.qcomboBox = None
self.keyPub = {}
self.fileChoosePaths = ""
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.initUI()
def initUI(self):
self.resize(640, 480)
self.setWindowTitle('TongSuo')
self.setFixedSize(640, 480)
self.qcomboBox = QComboBox(self.centralWidget)
self.qcomboBox.move(500, 150)
self.qcomboBox.addItems(['sm4'])
self.line_file_edit = QLineEdit(self.centralWidget)
self.line_file_edit.resize(300, 30)
self.line_file_edit.move(180, 150)
self.line_file_edit.setPlaceholderText('输入需加密的内容')
self.line_label = QLabel(self.centralWidget)
self.line_label.move(130, 155)
self.line_label.setText('原文:')
self.key_edit = QLineEdit(self.centralWidget)
self.key_edit.displayText()
self.key_edit.resize(300, 30)
self.key_edit.setPlaceholderText('可自动生成或者手动输入密钥')
self.key_edit.move(180, 100)
self.line_label2 = QLabel(self.centralWidget)
self.line_label2.move(130, 105)
self.line_label2.setText('密钥:')
self.pass_edit = QLineEdit(self.centralWidget)
self.pass_edit.displayText()
self.pass_edit.resize(300, 30)
self.pass_edit.move(180, 200)
self.line_label3 = QLabel(self.centralWidget)
self.line_label3.move(130, 205)
self.line_label3.setText('密文:')
self.dpass_edit = QLineEdit(self.centralWidget)
self.dpass_edit.displayText()
self.dpass_edit.resize(300, 30)
self.dpass_edit.move(180, 250)
self.line_label4 = QLabel(self.centralWidget)
self.line_label4.move(130, 255)
self.line_label4.setText('解密后:')
self.encrypt_file_btn = QPushButton('开始加密', self.centralWidget)
self.encrypt_file_btn.clicked.connect(self.encrypt_fun)
self.encrypt_file_btn.move(180, 400)
self.dencrypt_file_btn = QPushButton('开始解密', self.centralWidget)
self.dencrypt_file_btn.clicked.connect(self.decrypt_fun)
self.dencrypt_file_btn.move(380, 400)
pass
# 加密
def encrypt_fun(self):
# 生成32位16进制随机数
if self.key_edit.text() != '':
self.key = self.key_edit.text()
else:
self.key = uuid.uuid4().hex
self.key_edit.setText(self.key)
if self.qcomboBox.currentText() == 'sm4':
self.encrypt = sm4_cbc_encrypt(self.line_file_edit.text(), self.key)
self.pass_edit.setText(str(self.encrypt['output']))
pass
# 解密文件
def decrypt_fun(self):
if self.qcomboBox.currentText() == 'sm4':
self.decrypted = sm4_cbc_decrypt(self.pass_edit.text(), self.key_edit.text())
decrypted = str(self.decrypted['output'])
self.dpass_edit.setText(decrypted)
pass
if __name__ == "__main__":
app = QApplication([])
window = Widget()
window.show()
while app.exec():
pass
加密算法处理部分
import subprocess
# SM4-CBC加密
def sm4_cbc_encrypt(plaintext: str, key: str):
command = 'echo ' + plaintext + ' | /opt/tongsuo/bin/tongsuo enc -K ' + key + \
' -e -sm4-cbc ' \
'-iv 1fb2d42fb36e2e88a220b04f2e49aa13 -nosalt -base64'
return shell(command)
# SM4-CBC解密
def sm4_cbc_decrypt(ciphertext: str, key: str):
command = 'echo ' + ciphertext + '| /opt/tongsuo/bin/tongsuo enc -K ' + key + ' -d -sm4-cbc' \
' -iv 1fb2d42fb36e2e88a220b04f2e49aa13 -nosalt -base64'
return shell(command)
def shell(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
# 1、获取命令的输出和错误信息
output = process.stdout.read()
error = process.stderr.read()
# 2、将输出和错误信息解码为字符串
output = output.decode(encoding="utf8").strip()
error = error.decode(encoding="utf8")
# 3、返回命令的输出和错误信息
result = {"output": output, "error": error}
return result
实现效果
学习实践心得
在现代信息时代,数据安全已经成为了一个非常重要的问题。
为了保护数据的安全性,人们发明了各种各样的加密算法。其中,铜锁加密算法是一种非常优秀的加密算法,它具有高度的安全性和可靠性。
在学习并实践铜锁加密算法的过程中,我深深地感受到了它的优秀之处。 首先,铜锁加密算法具有非常高的安全性。这是因为它采用了一种非常复杂的加密方式,即将明文分成若干个块,然后对每个块进行加密,最后将加密后的块拼接在一起形成密文。这种加密方式使得攻击者很难破解密文,从而保证了数据的安全性。
其次,铜锁加密算法具有非常高的可靠性。这是因为它采用了一种非常严格的密钥管理方式,即每个密钥只能使用一次,使用后就要销毁。这种密钥管理方式使得攻击者很难获取密钥,从而保证了数据的可靠性。
在实践铜锁加密算法的过程中,我也遇到了一些问题。其中最大的问题就是密钥管理。由于每个密钥只能使用一次,使用后就要销毁,所以密钥的管理非常重要。如果密钥管理不当,就会导致数据的泄露或者丢失。因此,在实践铜锁加密算法的过程中,我非常注重密钥的管理,确保密钥的安全性和可靠性。
总之,学习并实践铜锁加密算法是一件非常有意义的事情。通过学习铜锁加密算法,我深深地感受到了它的优秀之处,包括高度的安全性和可靠性。在实践铜锁加密算法的过程中,我也遇到了一些问题,但是通过认真的学习和实践,我成功地解决了这些问题。
我相信,在未来的工作和生活中,铜锁加密算法会为我保护数据的安全性和可靠性提供非常有力的支持。