[⼆进制安全]CTF中那些古典密码666
⼀. 古典密码
1.凯撒密码(Caesar Cipher)
凯撒密码是⼀种⾮常古⽼的密码,其原理是通过字母的位移将原⽂和密⽂⼀⼀对应。
举个例⼦:明⽂是“Hello world”,偏移量为3。
所以A–>C,B–>D,依次类推,
所以密⽂就是”Khoor zruog“
凯撒密码是⼀种⾮常古⽼的密码,其原理是通过字母的位移将原⽂和密⽂⼀⼀对应。
举个例⼦:明⽂是“Hello world”,偏移量为3。
所以A–>C,B–>D,依次类推,
所以密⽂就是”Khoor zruog“
根据偏移量的不同,还存在⼀些特定的凯撒密码名称
偏移量为10:Avocat
偏移量为13:ROT13
在线二进制转换偏移量为-5:Cassis
偏移量为-6:Cassette
2. 培根密码(Bacon‘s Cipher)
培根密码加密时,明⽂中的每个字母都会转换成5个为⼀组由a和b组成的英⽂字母
如下:
可以看到这类密码⼜⼀个很明显的特点:只由a和b组成
但是加密解密的时候不分⼤⼩写…
所以看到这个密码就很容易想到时培根密码
例如:“Hello” --> “aabbbAABAAABABBABABBABBBA”
3. 摩斯密码(Morese Cipher)
相信这个密码应该没⼈不知道吧!电视剧⾥发电报⼀般⽤的都是这个密码。
摩斯密码是⼀种时通时断的信号代码,通过不同的排列顺序来表达不同的英⽂字母、数字和标点符号。发明于1837年。例如:“Hello” --> " … . .-… .-… — "
在线解密⽹站:moersima.00cha
4. 栅栏密码(Rail-fence Cipher)
栅栏密码,就是把要加密的明⽂分成N个⼀组,
然后把每组的第1个字连起来,形成⼀段⽆规律的话。(其中N称为栏数)
不过栅栏密码本⾝有⼀个潜规则,就是组成栅栏的字母⼀般不会太多。
栅栏密码也分为两种:Z型和W型
好多⽂章都只讲Z型,但考试经常出W型的,所以我两种都讲⼀下
Z型(常规)
就是按照N个⼀组分好后,按列从上到下组合成新的字符串
例如:“Helloworld”
N=2时:“Hloolelwrd”;N=3时:“Hlodeorlwl”
W型(变形)
这个很恶⼼,我研究了半天才搞出来
W型顾名思义,就是把明⽂按照W型排列,按⾏输出
其中栏数N即为⾏数,如图:(只能画出来了)
5. 仿射密码(Affine Cipher)
单表加密的⼀种,字母表的每个字母相应的值使⽤⼀个简单的数学函数对应⼀个数值,再把对应数值转换成字母。
⼀般仿射密码都会给你⼀个a⼀个b,这是解密的关键
加密函数:E(x)=(ax+b)mod m;
解密函数:D(x)=a^(-1)*(x-b)mod m;
其中涉及到的数学知识是乘法逆元
例⼦:假设a=5,b=8;明⽂为AFFINECIPHER
则加密为:
解密为:
⽽有些仿射密码的题⽬不会给a和b,⽽是直接给对应的字符
(2021MSSCTF–Crypto T1)
仿射密码没有在线的解密⼯具,所以以Python脚本⽅式展⽰
def get(a, b):
if b == 0:
return 1, 0
else:
k = a //b
remainder = a % b
x1, y1 = get(b, remainder)
x, y =y1, x1 - k * y1
return x, y
s = input("请输⼊解密字符:").upper()
a = int(input("请输⼊a:"))
b = int(input("请输⼊b:"))
#求a关于26的乘法逆元
x, y = get(a, 26)
a1 = x % 26
l= len(s)
for i in range(l):
cipher = a1 * (ord(s[i])- 65 - b) % 26
res=chr(cipher + 65)
print(res, end='')
6. 猪圈密码(Pigpen Cipher)
(2020第四届强⽹杯青少年专项赛线上–Crypto–easy_Crypto)
猪圈密码是⼀种以格⼦为基础的简单替代密码,⼀⼀对应的
这个玩意⼉长这样:
7. 维吉尼亚密码(Vigenère Cipher)
是使⽤⼀系列凯撒密码组成密码字母表的加密算法
意思是什么呢?
维吉尼亚密码通常会有两个元素:明⽂和密钥
密钥的长度不⼀定要和明⽂长度⼀样
加密时,密钥先循环称为密钥流,使其与明⽂长度相同,然后以偏移量加密
ps:偏移量是指当前字母相对于A的偏移量
举个例⼦:明⽂时ATTACKDAWN;密钥为LEMON
⾸先循环密钥形成密钥流:LEMONLEMONLE
然后根据偏移量进⾏逐个字符的加密
如第1位明⽂是A,密钥是L,L的偏移量为12-1=11,则加密后应该为(A+11)mod 26,即为L。同理,第⼆位明⽂是T,密⽂是E,E的偏移量为5-1=4,则加密后应该为(A+4)mod 26,即为X。依次类推,可以得到密⽂LXFOPVEFRNHR。
当然,还可以利⽤图表进⾏加密(我觉得眼都花了)
结尾
以上就是CTF中经常出现的古典密码
其实有些特征都很明显,⼀看都能看出来是哪种密码(培根,猪圈等)
像凯撒密码这类⼀般都会给题⽬提⽰或者要尝试
密码学只能多练…没别的⽅法,多见见就知道是谁了
如果进线下赛了就要去⽹上解密脚本了(因为线下赛不让联⽹哈哈)