PYQT5+python3.6+QT編寫一個帶ui的加密解密小程序

需要的環境爲python3.6、pyqt5(建議直接安裝Anaconda,因爲安好python後自帶pyqt5),還有QTcreator(用來寫ui界面),還需要一個編輯器(sublime或者notepad++均可,我使用的是PyCharm,畢竟IDE用起來順手)。使用到的工具就是如下圖:


  • 1、先做個ui界面

打開QT,新建一個項目,打開設計界面,可以看到很多控件直接可以拖拽到右面的界面上,在編輯界面中可以看到直接生成了ui代碼。

               



上圖是需要完成的ui,拖拽一下就可以完成

要注意在右側對各個控件命好名字,能自己區分(請無視我的命名方法= =),後期函數調用時需要用到


完成後到項目所在目錄下找到mainwindow.ui文件


在cmd中打開當前目錄,使用命令將xml代碼轉換爲python代碼

pyuic5 -o a.py mainwindow.ui


  • 2、打開pycharm添加其他代碼
新建一個工程,在工程下建立一個包,然後會自動生成__init__.py,把上邊的a.py拖入包中

代碼
# -*- coding: utf-8 -*-

import re
import sys
from PyQt5 import QtCore, QtWidgets
from a import Ui_MainWindow

class MyForm(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.initUi()   #綁定槽函數

    def initUi(self):   #每個按鈕對應不同函數
        self.ui.pushButton_1_Kaisa.clicked.connect(self.kaisaEncryption)
        self.ui.pushButton_2_Kaisa.clicked.connect(self.kaisaDecryption)
        self.ui.pushButton_1_Weiji.clicked.connect(self.weijiEncryption)
        self.ui.pushButton_2_Weiji.clicked.connect(self.weijiDecryption)
        self.ui.pushButton_1_fangshe.clicked.connect(self.fangsheEncryption)
        self.ui.pushButton_2_fangshe.clicked.connect(self.fangsheDecryption)
        self.ui.pushButton_1_peigen.clicked.connect(self.peigenEncryption)
        self.ui.pushButton_2_peigen.clicked.connect(self.peigenDecryption)

    def fangsheEncryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        fa = int(self.ui.lineEdit_fa.text())
        fb = int(self.ui.lineEdit_fb.text())
        fm = int(self.ui.lineEdit_fm.text())
        tlen = len(text)

        if text != '' and fm != 0:
            result = ""
            for i in range(0, tlen):
                result += chr((fa*(ord(text[i])-ord('a'))+fb)%fm+ord('a'))
            self.ui.textEdit_Output.setText(result)



    def fangsheDecryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        fa = int(self.ui.lineEdit_fa.text())
        fb2 = int(self.ui.lineEdit_fb.text())
        fm2 = int(self.ui.lineEdit_fm.text())
        fa2 = 0
        for i in range(0, 100):
            if int((i*fm2+1)/fa)*fa%fm2 == 1:
                fa2 = int((i*fm2+1)/fa)
                break
        self.ui.lineEdit_fa_2.setText(str(fa2))
        self.ui.lineEdit_fb_2.setText(str(fb2))
        self.ui.lineEdit_fm_2.setText(str(fm2))

        tlen = len(text)

        if text != '':
            result = ""
            for i in range(0, tlen):
                result += chr((fa2*((ord(text[i]) - ord('a')) - fb2)) % fm2+ord('a'))
            self.ui.textEdit_Output.setText(result)

    def peigenEncryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        result = ''
        for i in text:
            result += '{0:05b}'.format(ord(i)-ord('a'))
        # self.ui.textEdit_Output.setText(result)
        res = ''
        for i in result:
            if i=='0':
                res+='A'
            else:
                res+='B'
        self.ui.textEdit_Output.setText(res)


    def peigenDecryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        text = text.replace('A','0').replace('B','1')
        result = ''
        for i in range(0, len(text), 5):
            b = text[i : i+5]
            result += chr(int(b,2)+ord('a'))
        self.ui.textEdit_Output.setText(result)

    def weijiEncrypt(self, text, key):
        tlen = len(text)
        klen = len(key)
        result = ""

        for i in range(0, tlen):
            result += chr((ord(text[i]) + ord(key[i % klen]) - 2 * ord('a')) % 26 + ord('a'))

        return result

    def weijiDecrypt(self, text, key):
        tlen = len(text)
        klen = len(key)
        result = ""

        for i in range(0, tlen):
            result += chr((ord(text[i]) - ord(key[i % klen]) + 26) % 26 + ord('a'))

        return result

    def weijiEncryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        key = self.ui.lineEdit.text()
        if text != '' and key != '':
            text2 = self.weijiEncrypt(text, key)
            self.ui.textEdit_Output.setText(text2)


    def weijiDecryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        key = self.ui.lineEdit.text()

        if text != '' and key != '':
            text2 = self.weijiDecrypt(text, key)
            self.ui.textEdit_Output.setText(text2)

    def kaisaEncryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        temp = self.ui.spinBox.text()

        if text != '':
            text2 = self.kaisaEncrypt(text, temp)
            self.ui.textEdit_Output.setText(text2)

    def kaisaEncrypt(self, text, temp):
        tlen = len(text)
        result = ""

        for i in range(0, tlen):
            result += chr((ord(text[i]) - ord('a') + int(temp)) % 26 + ord('a'))

        return result

    def kaisaDecryption(self):
        text = self.ui.textEdit_Input.toPlainText()
        temp = self.ui.spinBox.text()

        if text != '':
            text2 = self.kaisaDecrypt(text, temp)
            self.ui.textEdit_Output.setText(text2)

    def kaisaDecrypt(self, text, temp):
        tlen = len(text)
        result = ""

        for i in range(0, tlen):
            result += chr((ord(text[i]) - ord('a') - int(temp)+26) % 26 + ord('a'))

        return result

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())
a.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(521, 410)
        MainWindow.setFocusPolicy(QtCore.Qt.WheelFocus)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(50, 10, 91, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralWidget)
        self.label_2.setGeometry(QtCore.QRect(200, 20, 71, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralWidget)
        self.label_3.setGeometry(QtCore.QRect(200, 190, 71, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralWidget)
        self.label_4.setGeometry(QtCore.QRect(20, 30, 51, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.spinBox = QtWidgets.QSpinBox(self.centralWidget)
        self.spinBox.setGeometry(QtCore.QRect(20, 50, 42, 22))
        self.spinBox.setObjectName("spinBox")
        self.textEdit_Input = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit_Input.setGeometry(QtCore.QRect(200, 50, 291, 111))
        font = QtGui.QFont()
        font.setFamily("隸書")
        font.setPointSize(12)
        self.textEdit_Input.setFont(font)
        self.textEdit_Input.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.textEdit_Input.setObjectName("textEdit_Input")
        self.textEdit_Output = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit_Output.setGeometry(QtCore.QRect(200, 220, 291, 111))
        font = QtGui.QFont()
        font.setFamily("隸書")
        font.setPointSize(12)
        self.textEdit_Output.setFont(font)
        self.textEdit_Output.setObjectName("textEdit_Output")
        self.pushButton_1_Kaisa = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_1_Kaisa.setGeometry(QtCore.QRect(70, 50, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_1_Kaisa.setFont(font)
        self.pushButton_1_Kaisa.setObjectName("pushButton_1_Kaisa")
        self.pushButton_2_Kaisa = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2_Kaisa.setGeometry(QtCore.QRect(120, 50, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_2_Kaisa.setFont(font)
        self.pushButton_2_Kaisa.setObjectName("pushButton_2_Kaisa")
        self.label_5 = QtWidgets.QLabel(self.centralWidget)
        self.label_5.setGeometry(QtCore.QRect(30, 80, 131, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.pushButton_1_Weiji = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_1_Weiji.setGeometry(QtCore.QRect(70, 150, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_1_Weiji.setFont(font)
        self.pushButton_1_Weiji.setObjectName("pushButton_1_Weiji")
        self.label_6 = QtWidgets.QLabel(self.centralWidget)
        self.label_6.setGeometry(QtCore.QRect(20, 100, 51, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.pushButton_2_Weiji = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2_Weiji.setGeometry(QtCore.QRect(120, 150, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_2_Weiji.setFont(font)
        self.pushButton_2_Weiji.setObjectName("pushButton_2_Weiji")
        self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit.setGeometry(QtCore.QRect(20, 120, 141, 21))
        font = QtGui.QFont()
        font.setFamily("隸書")
        font.setPointSize(12)
        self.lineEdit.setFont(font)
        self.lineEdit.setObjectName("lineEdit")
        self.label_7 = QtWidgets.QLabel(self.centralWidget)
        self.label_7.setGeometry(QtCore.QRect(50, 180, 81, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.label_8 = QtWidgets.QLabel(self.centralWidget)
        self.label_8.setGeometry(QtCore.QRect(20, 200, 151, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.label_9 = QtWidgets.QLabel(self.centralWidget)
        self.label_9.setGeometry(QtCore.QRect(10, 220, 41, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_9.setFont(font)
        self.label_9.setObjectName("label_9")
        self.lineEdit_fa = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fa.setGeometry(QtCore.QRect(50, 220, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fa.setFont(font)
        self.lineEdit_fa.setObjectName("lineEdit_fa")
        self.label_10 = QtWidgets.QLabel(self.centralWidget)
        self.label_10.setGeometry(QtCore.QRect(80, 220, 16, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_10.setFont(font)
        self.label_10.setObjectName("label_10")
        self.lineEdit_fb = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fb.setGeometry(QtCore.QRect(100, 220, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fb.setFont(font)
        self.lineEdit_fb.setObjectName("lineEdit_fb")
        self.label_11 = QtWidgets.QLabel(self.centralWidget)
        self.label_11.setGeometry(QtCore.QRect(130, 220, 41, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_11.setFont(font)
        self.label_11.setObjectName("label_11")
        self.lineEdit_fm = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fm.setGeometry(QtCore.QRect(160, 220, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fm.setFont(font)
        self.lineEdit_fm.setObjectName("lineEdit_fm")
        self.pushButton_2_fangshe = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2_fangshe.setGeometry(QtCore.QRect(120, 280, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_2_fangshe.setFont(font)
        self.pushButton_2_fangshe.setObjectName("pushButton_2_fangshe")
        self.pushButton_1_fangshe = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_1_fangshe.setGeometry(QtCore.QRect(70, 280, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_1_fangshe.setFont(font)
        self.pushButton_1_fangshe.setObjectName("pushButton_1_fangshe")
        self.label_12 = QtWidgets.QLabel(self.centralWidget)
        self.label_12.setGeometry(QtCore.QRect(10, 250, 41, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_12.setFont(font)
        self.label_12.setObjectName("label_12")
        self.label_13 = QtWidgets.QLabel(self.centralWidget)
        self.label_13.setGeometry(QtCore.QRect(70, 250, 21, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_13.setFont(font)
        self.label_13.setObjectName("label_13")
        self.lineEdit_fa_2 = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fa_2.setGeometry(QtCore.QRect(50, 250, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fa_2.setFont(font)
        self.lineEdit_fa_2.setObjectName("lineEdit_fa_2")
        self.lineEdit_fb_2 = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fb_2.setGeometry(QtCore.QRect(90, 250, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fb_2.setFont(font)
        self.lineEdit_fb_2.setObjectName("lineEdit_fb_2")
        self.lineEdit_fm_2 = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_fm_2.setGeometry(QtCore.QRect(150, 250, 21, 20))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.lineEdit_fm_2.setFont(font)
        self.lineEdit_fm_2.setObjectName("lineEdit_fm_2")
        self.label_14 = QtWidgets.QLabel(self.centralWidget)
        self.label_14.setGeometry(QtCore.QRect(120, 250, 41, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        self.label_14.setFont(font)
        self.label_14.setObjectName("label_14")
        self.label_15 = QtWidgets.QLabel(self.centralWidget)
        self.label_15.setGeometry(QtCore.QRect(50, 310, 81, 21))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label_15.setFont(font)
        self.label_15.setObjectName("label_15")
        self.pushButton_2_peigen = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2_peigen.setGeometry(QtCore.QRect(120, 340, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_2_peigen.setFont(font)
        self.pushButton_2_peigen.setObjectName("pushButton_2_peigen")
        self.pushButton_1_peigen = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_1_peigen.setGeometry(QtCore.QRect(70, 340, 41, 23))
        font = QtGui.QFont()
        font.setFamily("楷體")
        font.setPointSize(10)
        self.pushButton_1_peigen.setFont(font)
        self.pushButton_1_peigen.setObjectName("pushButton_1_peigen")
        MainWindow.setCentralWidget(self.centralWidget)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "加解密"))
        self.label.setText(_translate("MainWindow", "凱撒密碼"))
        self.label_2.setText(_translate("MainWindow", "輸入文本"))
        self.label_3.setText(_translate("MainWindow", "輸出文本"))
        self.label_4.setText(_translate("MainWindow", "位移量"))
        self.pushButton_1_Kaisa.setText(_translate("MainWindow", "加密"))
        self.pushButton_2_Kaisa.setText(_translate("MainWindow", "解密"))
        self.label_5.setText(_translate("MainWindow", "維吉尼亞密碼"))
        self.pushButton_1_Weiji.setText(_translate("MainWindow", "加密"))
        self.label_6.setText(_translate("MainWindow", "密鑰"))
        self.pushButton_2_Weiji.setText(_translate("MainWindow", "解密"))
        self.label_7.setText(_translate("MainWindow", "仿射密碼"))
        self.label_8.setText(_translate("MainWindow", "加解密函數(參數均爲整數)"))
        self.label_9.setText(_translate("MainWindow", "E(x)=("))
        self.label_10.setText(_translate("MainWindow", "x+"))
        self.label_11.setText(_translate("MainWindow", ")mod"))
        self.pushButton_2_fangshe.setText(_translate("MainWindow", "解密"))
        self.pushButton_1_fangshe.setText(_translate("MainWindow", "加密"))
        self.label_12.setText(_translate("MainWindow", "D(x)="))
        self.label_13.setText(_translate("MainWindow", "(x-"))
        self.label_14.setText(_translate("MainWindow", ")mod"))
        self.label_15.setText(_translate("MainWindow", "培根密碼"))
        self.pushButton_2_peigen.setText(_translate("MainWindow", "解密"))
        self.pushButton_1_peigen.setText(_translate("MainWindow", "加密"))

點此下載源碼



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章