开放原子训练营(第一季)铜锁探密 初学心得

文章介绍了一个使用Python的PySide6库构建的图形界面应用,该应用实现了SM4-CBC加密算法,用户可以进行加密和解密操作。通过这个应用,作者探讨了数据安全的重要性以及铜锁加密算法在保障信息安全方面的优势,包括其高安全性和可靠性。在实践中,作者强调了密钥管理的关键性。
摘要由CSDN通过智能技术生成

目录

图形界面代码部分

加密算法处理部分

实现效果

 学习实践心得


图形界面代码部分

# 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

实现效果

         

 学习实践心得

 

        在现代信息时代,数据安全已经成为了一个非常重要的问题。

        为了保护数据的安全性,人们发明了各种各样的加密算法。其中,铜锁加密算法是一种非常优秀的加密算法,它具有高度的安全性和可靠性。

        在学习并实践铜锁加密算法的过程中,我深深地感受到了它的优秀之处。 首先,铜锁加密算法具有非常高的安全性。这是因为它采用了一种非常复杂的加密方式,即将明文分成若干个块,然后对每个块进行加密,最后将加密后的块拼接在一起形成密文。这种加密方式使得攻击者很难破解密文,从而保证了数据的安全性。

        其次,铜锁加密算法具有非常高的可靠性。这是因为它采用了一种非常严格的密钥管理方式,即每个密钥只能使用一次,使用后就要销毁。这种密钥管理方式使得攻击者很难获取密钥,从而保证了数据的可靠性。

        在实践铜锁加密算法的过程中,我也遇到了一些问题。其中最大的问题就是密钥管理。由于每个密钥只能使用一次,使用后就要销毁,所以密钥的管理非常重要。如果密钥管理不当,就会导致数据的泄露或者丢失。因此,在实践铜锁加密算法的过程中,我非常注重密钥的管理,确保密钥的安全性和可靠性。

        总之,学习并实践铜锁加密算法是一件非常有意义的事情。通过学习铜锁加密算法,我深深地感受到了它的优秀之处,包括高度的安全性和可靠性。在实践铜锁加密算法的过程中,我也遇到了一些问题,但是通过认真的学习和实践,我成功地解决了这些问题。

        我相信,在未来的工作和生活中,铜锁加密算法会为我保护数据的安全性和可靠性提供非常有力的支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值