基于Python实现CTF加解密工具实现的程序设计

该博客介绍了一个基于Python的CTF加解密工具的实现,包括凯撒、仿射、Base64等多种算法,并提供了使用步骤、界面设计和部分代码。作者通过这个项目加深了对加解密算法的理解,并分享了遇到的问题与解决方案。

目录

前言

一、项目概述

二、使用步骤

1.引入库

2.需求分析

        3.方案设计

        4.项目演示

        5.项目代码

总结


前言

为了实现多种CTF加解密工具,特写下此程序代码提供参考,欢迎批评指正。


一、项目概述

        该项目主要以CTF加解密工具实现为主题,通过编程实现各种加解密工具的应用。主要用到python环境,以及tkinter库。

        通过此项目,让我们对各种加解密算法的有更进一步的了解,以及如何去运用,去计算等等。

二、使用步骤

1.引入库

代码如下:

from cProfile import label
from cgitb import text
from pydoc import plain
from tkinter import *
from Crypto.Cipher import ARC4

import tkinter
import string
import base64
import math
import numpy as np
import sys
import re

 

        这些库,大多都是用于后面实现加解密工具所需要。主要界面设计用的库为tkinter库,这个算是比较简单且易懂的一个库吧。

2.需求分析

        能实现多种常见的ctf加解密方法,选择相应加密/解密算法后,输入明文/密文,可以给出加密/解密结果。包括但不限于凯撒、维吉尼亚、仿射、base64、摩斯密码……

3.方案设计

  3.1、总体方案设计

        1.首先设计程序界面:利用python中自带的tkinter库,去编写一个简单的界面,用于展示和归纳所有加解密算法的一个界面。

        2.加入算法:加入各种CTF加解密工具的算法,让程序有可用的加解密算法。

        3.美化界面:在加入算法完成后,去对界面进行一个优化,让用户使用起来更加方便和直观感觉良好,看上去比较实用。

  3.2、功能设计

1、凯撒密码:
        通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。通常偏移量为3。
例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

2、仿射密码:

        仿射密码的加密算法就是一个线性变换,即对任意的明文字符x,对应的密文字符为 ,其中,a,b∈Z26,且要求gcd(a,26)=1,函数e(x)称为仿射加密函数。

加密案例:

设密钥K= (7, 3), 用仿射密码加密明文hot。

三个字母对应的数值是7、14和19。分别加密如下:

(7×7 + 3) mod 26 = 52 mod 26 =0

(7×14 + 3) mod 26 = 101 mod 26 =23

(7×19 + 3) mod 26 =136 mod 26 =6

三个密文数值为0、23和6,对应的密文是AXG。

解密案例:

本例是按照上例来解密的,也就是用仿射密码解密密文AXG,密钥k=(7,3)。

三个字母对应的数值是0、23、6。解密如下:

由解密Dk©=k3(c- k2) mod n(其中(k3 ×k1)mod26 = 1);

可知k3×7=1(mod 26)(其实,就是1/mod26),也就是存在整数t,使7×k3+26t=1。(1)

利用辗转相除法求解k3:

26 = 7 * 3 + 5;(2)(对26作形如:a * b + c,其中 c 就是余数)

7 = 5 * 1 + 2;(3)(作形如: a = c * m + n ,其中 a ,c 是上一步的, m 是乘数 ,n 是余数)

5 = 2 * 2 + 1;(一直循环上一步,直到余数 n = 1)

进行回代:

1 = 5 - 2 * 2

= 5 - (7 - 5 * 1) * 2(第一个2用(3)式来代替,也就是2 = 7 - 5 * 1)

= 3 * 5 - 2 * 7

= 3 * (26 - 7 * 3) - 2 * 7(5用(2)式来代替,也就是5 = 26 - 7 * 3)

= -11 * 7 + 3 * 26(直到不用进行代替,也就是得到只有7和26的表达式)

对比(1)式可知:t = 3 ,k3 = -11;

所以:Dk©=k3(c- k2) mod n <=> Dk©=-11(c- 3) mod 26 .

对于第一位 A :

-11 ( 0 - 3 ) mod 26 = ( -11 * -3 )mod 26 = 7;

对于第二位 X :

-11 ( 23 - 3 ) mod 26 = ( -11 * 20 ) mod 26 = ( -220 ) mod 26 = ( 26 * -9 ) + 14 = 14;

( 用计算器求 (-220) mod 26 ,不同的计算器会有不同的结果,百度的计算器求得就是 14 ,直接百度搜索:(-220) mod 26 就可以了,不能直接在计算器上输入 -220mod26 ,那样会得出负数。其实,可以这样算,算出(-11)mod 26 =15,再计算 (15 * 20)mod26 = 14)

对于第三位 G :

-11 ( 6 - 3 ) mod 26 = ( -11 * 3 )mod 26 = ( -33 )mod 26 = 19;(计算方法如上)

三个明文值为 7,14,19,对应的明文是HOT,也就是hot。

3、Base64:

        Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应4个base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。

特征:(1)在base64中的可打印字符包括字母A-Z、a-z、数字0-9,+ / =。

(2)永远是4的倍数,不足四的用=补齐。

4、Base32:

        Base32跟Base64原理差不多,只是换了个进制而已。

5、摩斯密码:

        摩斯密码(摩尔斯电码)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号;它的代码包括五种: 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之间中等的停顿以及句子之间长的停顿。

        所以他的算法,只要把对照表加入到里面,然后利用转换的方式让其输出即可。

6、RC4密码:

        RC4产生一个伪随机比特流(a keystream),加密的时候,把它跟明文进行比特级别的异或处理,解密时进行一样的步骤(因为异或操作是对称的)。(这个类似于Vernam cipher ,只不过后者不使用伪随机比特流而直接使用随机比特流)。为了产生 keystream,本密码算法使用时需要两个数据的私有空间来保存内部状态:

        1.总共256个字节的序列(下面用“S"代替)

        2.两个8比特的索引指针(下面用“i”和“j”代替)

        比特流序列的初始化是根据key的长度(key的长度通常在40到256比特之间),使用key-scheduling算法来进行的(KSA),一旦完成了初始化,比特流就可以根据伪随机生成算法(PRGA)来产生。

7、栅栏密码:

        所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

例如:

明文为:IAMMANBUTLIKEWOMEN      

加密密钥为3

加密阵列见表:

则:密文为IMBLEM   AAUIWE   MNTKON

解读:将一段字符串(明文)按照(加密密钥)3个一组进行排列,然后将每组的第一列提取,第二列,第三列。分别循环提取。

密文为IMBLEMAAUIWEMNTKON

加密密钥为3

求明文,解密密钥为18/3=6

按照解密规则,得出如下过程。

明文:IAM MAN BUT LIK EWO MEN

解读:将一段字符串(密文)按照6(解密密钥)个一组进行排列,然后将每组的第一列提取,第二列,第三列,第四列,第五列,第六列。分别循环提取。

8、维吉尼亚密码:

        在凯撒密码基础上扩展出来的多表密码,引入了密钥,根据密钥来决定用哪一行的密表来进行替换.

假设明文对应行,秘钥对应列.我们举个简单的例子:

明文: d

秘钥: c

在表中找到第d行,第c列,则

密文:F

以此类推.

 

9、希尔密码:

加密:

1、定义一个矩阵a(须存在逆矩阵)作为加密密钥:

[1,2,1]

[0,2,1]

[1,0,2]

2、将需要加密的明文字母转换为其对应的字母表数字(1-a,2-b……);

3、将转换后的明文数字序列按照密钥矩阵的阶数进行分组(如本次为3个字符一组);

4、每组数字序列和密钥矩阵进行矩阵的乘法运算(1x3 矩阵乘以 3x3矩阵),结果即为密文数字序列;

5、可将密文数字序列转换为其对应字母,即为密文字符串。

解密:

解密流程与加密相同,唯一不同之处在于:需先求出加密密钥的逆矩阵

在做矩阵相成时,用密文分组乘以逆矩阵,结果即为明文

4.项目演示

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值