基于Python实现的CTF Crypto加密解密工具

本文记录了一款使用Python和Qt构建的CTF Crypto工具,支持凯撒密码、维吉尼亚密码、栅栏密码、摩斯密码、Base64、ASCII、AES、DES、RSA、RC4等加密解密。通过qt和pyside6设计界面,实现功能包括密码类型加密解密和维吉尼亚密文破解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下自己小学期内做的项目。基于Python实现一个能够对凯撒密码、维吉尼亚密码、栅栏密码、摩斯密码、Base64编码、Ascii编码、AES、DES、RSA、RC4的加密解密以及维吉尼亚密文破解密钥和明文的CTF Crypto工具。其中程序的界面使用了qt以及pyside6实现。

以上就是该程序实现的界面,下面简单记录一下从拿到这个项目大纲再到基本实现的过程:

目录

第一步:进行需求分析,确定实现的功能

第二步:为程序设计一个界面,我这里用的是qt以及pyside6实现

第三步:实例化窗口

第四步:实现不同密码类型下的加密和解密

第五步:将槽与信号和相关的函数进行绑定 

总结:


第一步:进行需求分析,确定实现的功能

由于在CTF比赛里的Crypto题目中,经常会有一些大整数的运算用于对字符串的加密和解密,如果比赛中使用计算来对加解密的字符串进行处理会十分麻烦。因此,如果可以编写一个CTF Crypto工具自动处理字符串加解密就显得十分重要了。在众多密码类型中,常见的有以下几种:

常见的古典密码类型: 包括但不限于维吉利亚密码,凯撒密码,栅栏密码……

常见的现代密码类型: AES、DES、RSA、RC4……

常见的编码类型: Base64、Ascii、摩斯密码……

综合以上的需求分析,就尝试实现这几种吧…………

第二步:为程序设计一个界面,我这里用的是qt以及pyside6实现

qt以及pyside6安装:

pip install Pyside6

安装完后就可以进入Pyside6的文件目录下找到design.exe进入qt去设计程序的界面了

进入后一般选择MainWindow或者Widget就够用了

 选择类型后就拖动左边的部件到程序的窗口进行设计了

具体的qt界面的使用这里就不再赘述了,可以去b站看一下大佬们的仔细讲解,这里附上个人觉得讲的非常好的两个大佬的视频链接:

Python图形界面 15分钟快速入门PySide/PyQt_哔哩哔哩_bilibili

 【python】快速上手GUI图形界面的编写(一)(使用pyside6,pyqt6,pyside2,pyqt5)_哔哩哔哩_bilibili

qt设计完界面后就是以下这个样子了

至此,程序的界面就已经设计完毕了,但目前这个ui文件并不能直接部署到python中去使用,需要将其转化为py类型的文件才可以使用

 转化方法:

pyside6-uic xxxx.ui -o xxxx.py

转化完成后就可以进入下一步,进行部件与信号的绑定了

第三步:实例化窗口

 首先是对ui的文件进行连接并实例化窗口,同时引入了qtmodern模块进行简单的美化

from PySide6.QtWidgets import QApplication, QMainWindow
from ui import Ui_MainWindow

import qtmodern.styles    #引入qtmodern模块,简单的美化程序界面
import qtmodern.windows

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()  # UI类的实例化()
        self.ui.setupUi(self)


if __name__ == '__main__':
    app = QApplication([])  # 启动一个应用
    qtmodern.styles.light(app)    #选择light风格,也可以选择另一个dark风格
    window = MainWindow()  # 实例化主窗口
    window = qtmodern.windows.ModernWindow(window)
    window.show()  # 展示主窗口
    app.exec()  # 避免程序执行到这一行后直接退出

运行看一下程序的界面: 

 

 至此,就完成了窗口的实例化了,非常简单。

第四步:实现不同密码类型下的加密和解密

 1、凯撒密码的加密和解密

凯撒密码是已知最早、最简单的密码之一。它是一种替换密码,在这种密码中,明文中的每个字母都被“移位”到字母表中一定数量的位置。例如,移动1,A会被B取代,B会变成C,以此类推。这种方法以朱利叶斯·凯撒(Julius Caesar)的名字命名。 

假设我们移位的值是6,掰起指头算一下,那么a对应的就是gb对应hc对应i等等。 

加密前:i  love csdn
加密后:o rubk iyjt

python实现代码:

def kaisa_encode(p:str,k:int):
    list = ''
    for word in p:
        if word == ' ':
            tword = ' '
        else:
            tword = chr((ord(word)-ord('a') + k) % 26 + ord('a'))
        list += tword
    return list
def kaisa_decode(c:str,k:int):
    list = ' '
    for word in c:
        if word == ' ':
            tword = ' '
        else:
            tword = chr((ord(word)-ord('a') - k) % 26 + ord('a'))
        list += tword
    return list

 2、维吉尼亚密码的加密和解密 

维吉尼亚密码是一种简单的多表代换密码(由26个类似的Caesar密码的代换表组成),

即由一些偏移量不同的恺撒密码组成,这些代换在一起组成了密钥。

英文中a~z,由0~25表示。

假设串长为m,明文为P,密文为C,密钥为K则

 

加密方法

加密公式:C = (P + K)%26

C:密文

P:原文

K:第几套加密方式

使用第几套加密方式是通过约定一个规则来确定的,这个规则就是“密钥”。

这样密钥和原文每个字符一一对应,如果密钥长度不足,那么循环替代。

解密方法

解密公式:P = (C - K)%26

C:密文

P:原文

K:第几套加密方式

python实现代码: 

def Veginere_encode(p:str,key:str):
    keylen = len(key)
    plen = len(p)
    c = ''
    i = 0
    while i < plen:
        j = i % keylen
        k = letter.index(key[j])
        m = letter.index(p[i])
        c += letter[(m+k)%26]
        i +=1
    return c
def Veginere_decode(c:str,key:str):
    keylen = len(key)
    clen = len(c)
    p = ''
    i = 0
    while i < clen:
        j = i % keylen
        k = letter.index(key[j])
        m = letter.index(c[i])
        if m < k:
            m +=26
        p += letter[m-k]
        i +=1
    return p

  3、栅栏密码的加密和解密 

 栅栏密码

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭于晏佛山分晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值