古典密码学

一、键盘密码

利用了键盘上的横纵坐标。

 

 例如我们要对‘m’进行加密,我们可以写成 32 ;当然我们也可以写成 23 。

二、摩斯密码

摩斯密码只有三个字符组成 '.'  '-'  ' '。点、下划线、空格。

三、凯撒密码

介绍:这是一种位移加密方式,只对 26 个字母进行位移替换加密。

示例:我们有密文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ

   当我们让偏移量为1的时候

   我们的明文字母表就变成了:ZABCDEFGHIJKLMNOPQRSTUVWXY  

         这时候我们对字符串‘meng’加密就变为了----> ‘nfoh’。M往前移动一位变成了N;E往前位移了一位变成了F;同理。一下是我写的一个简单的凯撒加密python脚本:

str = input("请输入要加密的字符串:")
x = input("请输入偏移量:")

s = ""
for i in str:
  s += chr((ord(i)-97+int(x))%26+97)

print("加密后的字符串为:" + s)
 

下面我们介绍凯撒密码解密:
 
 

四、ROT13密码

介绍:ROT13 是凯撒密码的一种变体,移位数固定为 13,即把明文中的每一个字母在字母表中向后移动
13 位,数字和非字母字符保持不变。
示例:A 向后移动 13 位=N,N 向后移动 13 位=A,13 是 26 个英文字母的中间值。

五、位移密码

像凯撒密码这样将字符指定向前或者向后进行位移的方式我们统称位移密码,但是凯撒密码只对 26
个英文字母进行位移,解密难度相对较小,如果通过整个 asscii 进行位移,难度就变得很大。所以通过
ascii 码表进行位移的密码又称之为变异凯撒。

举例:

密文:ch\atpl[h\X`Zdl
提示:明文字符串格式为 flag{}
对照关系如下:
ch\atpl[h\X`Zdl

flag{xxxxxxxxx}

找规律:
c=99 f=102 c+3=f
h=104 l=108 h+4=l
\=92 a=97 \+5=a
a=97 g=103 a+6=g
t=116 {=123 t+7={
省略中间的 9 个字符。
l=108 }=125 l+17=}

一眼就能看出来规律。下面是一个解密的python脚本。

strings = 'ch\\atpl[h\X`Zdl'
flag = ''
key = 3
for i in strings:
  flag += chr(ord(i)+key)
  key += 1
print(flag)

六、仿射密码

仿射密码加解密公式:
加密函数:密文 = (a*明文 + b) Mod26,其中 a 与 26 互质。 a 和 26 是互质的,所以 a 的取值范围:1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25。b 是凯撒密码中原来的移动位数

解密函数:明文 = a^-1 (密文 - b) Mod26,其中 a^-1是 (密文-b)/a 的乘法逆元。

乘法逆元计算公式:(a*m) mod 26 = 1 #m=乘法逆元的值。
一般题目会给我们a和b的值,所以我们只需要去求的乘法逆元的值即可。

七、单表替换密码

明码表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码表:SDZABCYEFJHIGKMLNOPQRXTUVW(随机)
明文:MENG
密文:OBKM

利用字频分析工具去解密,前提是字符串要足够长。

八、培根密码

培根密码是一种简单的替换密码,密文字符只有两个:a 和 b,每个明文字符都会被替换为一个由 a 和 b 组成的长度为 5 的字符串。

培根密码的密码表有 2 种:
第一种方式:常规密码表
a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABB k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB
第二种方式:扩展密码表
a AAAAA g AABBA m ABBAA s BAABA y BBAAA
b AAAAB h AABBB n ABBAB t BAABB z BBAAB
c AAABA i ABAAA o ABBBA u BABAA
d AAABB j ABAAB p ABBBB v BABAB
e AABAA k ABABA q BAAAA w BABBA
f AABAB l ABABB r BAAAB x BABBB
第一种 u-v 以及 i-j 的密文是相同的,第二种每个字母对应的密文是唯一的。

九、猪圈密码

 

 

 利用在线加解密网站。

十、维吉尼亚密码

维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密
码的一种简单形式。下图是密码表。
示例:

明文:xueshenit
密码:kali
加密后密文:hupareyqd

这有点像我们前面的键盘密码,通过 xy 轴来定位密码。这样仅仅是为了演示维吉尼亚密码是如何加
密的,我们转换一下方法。
kali 转换为数字。
明文:x u e s h e n i t
密钥:k a l i
偏移:10 0 11 8
密文:h u p a r e y q d
问题:密钥的长度不够怎么办?
循环使用:
明文:x u e s h e n i t
密钥:k a l i k a l i k
偏移:10 0 11 8 10 0 11 8 10
密文:h u p a r e y q d

 
在线解密网站:https://www.guballa.de/vigenere-solver
 

 

十一、费纳姆密码

附:ASCⅡ码与英文的对照表

A 1000001 N 1001110
B 1000010 O 1001111
C 1000011 P 1010000
D 1000100 Q 1010001
E 1000101 R 1010010
F 1000110 S 1010011
G 1000111 T 1010100
H 1001000 U 1010101
I 1001001 V 1010110
J 1001010 W 1010111
K 1001011 X 1011000
L 1001100 Y 1011001
M 1001101 Z 1011010

明文和密钥进行异或,得出密文。

示例:

加密过程:
明文 xueshenit 替换为二进制格式:
1011000 1010101 1000101 1010011 1001000 1000101 1001110 1001001 1010100
密钥 nice 替换为二进制格式:
1001110 1001001 1000011 1000101

我们拿第一个字符来进行异或,异或时相同为 0,不同为 1。

x 1011000

n 1001110
异或结果:0010110

十二、杰斐逊转轮密码

十三、栅栏密码

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

 

示例:
xueshenit
分组方法:通过字符串长度的因数来分组,这样可以保证每组的字符串长度都一致。
xueshenit 长度为 9 ,9 的因数是 3 ,所以分割为 3 个字符串为一组。
xue
she
nit
按列取出每一个字符:xsn uhi eet
加密结果:xsnuhieet

 

最后附上万能工具https://github.com/qianxiao996/CTF-Tools/releases/tag/v1.3.6

 

 

 

 

 

 

posted @ 2022-04-21 21:26  hithub  阅读(1068)  评论(0编辑  收藏  举报