资讯详情

基于编程的信息安全项目实践

开发简单界面解决方案ctf加解密。

环境:python3.10.5 PYQT5

1.PYQT5安装

pip install PYQT5

2.总结小知识

2.1 绑定按钮信号

self.pushbutton1.clicked.connect(self.函数名)

2.2 获取textedit文本

self.textedit1.toPlainText()

2.3 获取lineedit文本

self.lineedit1.text()

2.4 输出textbrowser文本

self.textbrowser1.setTest()

self.textbrowser1.insertPlainText()#追加输出不换行

2.5 切换页面

# 页面1信号

self.pushButton.clicked.connect(self.btn1_fun)

# 页面1

def btn1_fun(self):

self.stackedWidget.setCurrentIndex(0)

3.功能实现

3.1 base编码解码

import base64 # base64加密实现函数

def base64_JIAM(self):

a = self.textEdit_1.toPlainText()

st = a.encode() # 默认以utf8编码

res = base64.b64encode(st)

self.textBrowser.setText(str(res.decode()))

# base64解密实现函数

def base64_JIEM(self):

a = self.textEdit_1.toPlainText()

st = a.encode() # 默认以utf8编码

res = base64.b64decode(st)

try:

self.textBrowser.setText(str(res.decode()))

3.2 仿射密码

# 仿射密码加密实现函数

def FANGSHE_JIAM(self):

s = 'abcdefghijklmnopqrstuvwxyz'

s1 = []

a = int(self.lineEdit_3.text())

b = int(self.lineEdit_4.text())

m = self.textEdit_2.toPlainText()

for i in range(len(m)):

c = s.index(m[i])

dx1 = (a * c b)

R = dx1 - 26 * (dx1 // 26)

s1.append(R)

self.textBrowser_2.insertPlainText(s[R])

# 仿密密码解密实现函数

def FANGSHE_JIEM(self):

s = 'abcdefghijklmnopqrstuvwxyz'

a = int(self.lineEdit_3.text())

b = int(self.lineEdit_4.text())

m = self.textEdit_2.toPlainText()

for i in range(0, 27):

if (a * i) % 26 == 1:

ny = i

for j in range(len(m)):

c = s.index(m[j])

dx1 = ny * (c - b)

R = dx1 - 26 * (dx1 // 26)

self.textBrowser_2.insertPlainText(s[R])

3.3 栅栏密码

# 栅栏密码加密实现函数

def ZHALAN_JIAM(self):

n = int(self.lineEdit_5.text())

s = self.textEdit_3.toPlainText()

s1 = []

for x in range(n, 0, -1):

for i in range(len(s)):

if ((i x) % n == 0):

s1.append(s[i])

s2 = "".join(s1)

self.textBrowser_5.setText(s2)

# 围栏密码解密

def ZHALAN_JIEM(self):

e = self.textEdit_3.toPlainText()

elen = len(e) # 计算字符串长度

field = []

for i in ange(2, elen): # 做一个循环,从2开始到数字elen(字符串长度)

            if (elen % i == 0): # 计算哪些数字能整除字符串

                field.append(i) # 将能整除的数字append到field里面

        for f in field:

            b = elen // f # 用字符串长度除以上面计算出能整除的数字f

            result = {x: '' for x in range(b)}

            for i in range(elen): # 字符串有多少位,就循环多少次

                a = i % b;

                result.update({a: result[a] + e[i]}) # 字符串截断,并update新数据

            d = ''

            for i in range(b):

                d = d + result[i]

            p = "分为{}栏时,解密结果为:{}".format(str(f), d)

            self.textBrowser_5.append(p)

            # self.textBrowser_5.clear()

3.4 凯撒密码

    #凯撒密码加密     def KAISA_JIAM(self):         d = self.textEdit_7.toPlainText()         p = int(self.lineEdit.text())         s_encrypt = ''         for word in d:             if word == ' ':                 word_encrypt = ' '             else:                 word_encrypt = chr((ord(word) - ord('a') + p) % 26 + ord('a'))             s_encrypt += word_encrypt         self.textBrowser_6.setText(s_encrypt)

    # 凯撒密码解密     def KAISA_JIEM(self):         d = self.textEdit_7.toPlainText()         p = int(self.lineEdit.text())         s_decrypt = ''         for word in d:             if word == ' ':                 word_decrypt = ' '             else:                 word_decrypt = chr((ord(word) - ord('a') - p) % 26 + ord('a'))             s_decrypt += word_decrypt         self.textBrowser_6.setText(s_decrypt)

3.5 摩斯密码

 # 摩斯密码解密实现函数

    def MOSI_JIEM(self):

        a = self.textEdit_8.toPlainText()

        s = a.split(" ")

        dict = {'.-': 'A',

                '-...': 'B',

                '-.-.': 'C',

                '-..': 'D',

                '.': 'E',

                '..-.': 'F',

                '--.': 'G',

                '....': 'H',

                '..': 'I',

                '.---': 'J',

                '-.-': 'K',

                '.-..': 'L',

                '--': 'M',

                '-.': 'N',

                '---': 'O',

                '.--.': 'P',

                '--.-': 'Q',

                '.-.': 'R',

                '...': 'S',

                '-': 'T',

                '..-': 'U',

                '...-': 'V',

                '.--': 'W',

                '-..-': 'X',

                '-.--': 'Y',

                '--..': 'Z',

                '.----': '1',

                '..---': '2',

                '...--': '3',

                '....-': '4',

                '.....': '5',

                '-....': '6',

                '--...': '7',

                '---..': '8',

                '----.': '9',

                '-----': '0',

                '..--..': '?',

                '-..-.': '/',

                '-.--.-': '()',

                '-....-': '-',

                '.-.-.-': '.'

                };

 

        for item in s:

            self.textBrowser_7.insertPlainText(dict[item])

 

 

    # 摩斯密码加密实现函数

    def MOSI_JIAM(self):

        a = self.textEdit_8.toPlainText()

        dict = {'A': '.-',

                'B': '-...',

                'C': '-.-.',

                'D': '-..',

                'E': '.',

                'F': '..-.',

                'G': '--.',

                'H': '....',

                'I': '..',

                'J': '.---',

                'K': '-.-',

                'L': '.-..',

                'M': '--',

                'N': '-.',

                'O': '---',

                'P': '.--.',

                'Q': '--.-',

                'R': '.-.',

                'S': '...',

                'T': '-',

                'U': '..-',

                'V': '...-',

                'W': '.--',

                'X': '-..-',

                'Y': '-.--',

                'Z': '--..',

                '1': '.----',

                '2': '..---',

                '3': '...--',

                '4': '....-',

                '5': '.....',

                '6': '-....',

                '7': '--...',

                '8': '---..',

                '9': '----.',

                '0': '-----',

                '?': '..--..',

                '/': '-..-.',

                '()': '-.--.-',

                '-': '-....-',

                '.': '.-.-.-'

                };

 

        for item in a:

            self.textBrowser_7.insertPlainText(dict[item])

3.6 url编码解码

from urllib.parse import quote

from urllib.parse import unquote

 # URL编码实现函数

    def URL_BM(self):

        f = self.textEdit_9.toPlainText()

        text = quote(f, 'utf-8')

        self.textBrowser_8.setText(str(text))

 

 

    # URL解码实现函数

    def URL_JM(self):

        f = self.textEdit_9.toPlainText()

        text = unquote(f, 'utf-8')

        self.textBrowser_8.setText(str(text))

3.7 哈希算法

import hashlib # 哈希算法实现函数

    def HASH(self):

        sha1 = hashlib.sha1() # 应用MD5算法

        md5 = hashlib.md5()

        sha256 = hashlib.sha256()

        sha512 = hashlib.sha512()

        data = self.textEdit_10.toPlainText()

        md5.update(data.encode('utf-8'))

        sha1.update(data.encode('utf-8'))

        sha256.update(data.encode('utf-8'))

        sha512.update(data.encode('utf-8'))

 

        a = "MD5加密结果为:\n{}".format(md5.hexdigest())

        b = "SHA-1加密结果为:\n{}".format(sha1.hexdigest())

        c = "SHA 256加密结果为:\n{}".format(sha256.hexdigest())

        d = "SHA 512加密结果为:\n{}".format(sha512.hexdigest())

 

        self.textBrowser_9.setText(a)

        self.textBrowser_9.append(b)

        self.textBrowser_9.append(c)

        self.textBrowser_9.append(d)

3.8读取文件与导出文件

    # 哈希算法读取文件

    def readFile_HASH(self):

        fname = QFileDialog.getOpenFileName(self, "Open File", "./", "Txt (*.txt)")

        # 打开文件 返回一个字符串第一个是路径, 第二个是要打开文件的类型

        # 如果用户主动关闭文件对话框,则返回值为空

 

        if fname[0]: # 判断路径非空

            f = QFile(fname[0]) # 创建文件对象,不创建文件对象也不报错 也可以读文件和写文件

            # open()会自动返回一个文件对象

            f = open(fname[0], "r") # 打开路径所对应的文件, "r"以只读的方式 也是默认的方式

            with f:

                data = f.read()

                self.textEdit_10.setText(data)

            f.close()

 

 

    # 哈希算法导出文件

    def writeFile_HASH(self):

        fname = QFileDialog.getSaveFileName(self, "Write File", "./", "All (*.*)") # 写入文件首先获取文件路径

        if fname[0]: # 如果获取的路径非空

            f = open(fname[0], "w") # 以写入的方式打开文件

            with f:

                data = self.textBrowser_9.toPlainText() # 获取textEdit的str

                f.write(data)

        f.close()

其他加密读取文件和导出文件代码一致,修改文本对象名即可。

3.9 最终实现效果

0dfffb8ae705491b841452a847daa5ec.png

 

 

4 总结

  第一次写博客,也是第一次写ui,ui从头开始问题巨多🙀,密码学知识也忘的差不多了😢,天天看代码查报错😾,不过收获还是挺大的,拓展了一些没接触过的东西,回顾了一些密码学的知识。

 

 

 

 

 

标签: dx1台中仪表变送器dx1通化仪表变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台