密码学
解题时注意题目的提示,包括 flag{}
格式提示
1 ASCII编码
常用不可打印字符:%00,%0D,%0A,%7F,%80
可以使用burpsuit解码
2 Base64 家族
- Base64编码原理
- Base64的码表只有64个字符,如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。
- 因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示,8和6的最 小公倍数是24,所以4个Base64字符可以表示3个标准的asclI字符;
- 如果是字符串转换为Base64码,会 先把对应的字符串转换为asclI码表对应的数字,然后再把数字转换为2进制,比 如a的asclI码为97,97的二进制是: 01100001,把8个二进制提取成6个, 剩下的2个二进制和
后面的二进制继续拼接,最后再把6个二进制码转换为Base64对应的编码
- 可以使用burpsuit解码,hackbar解码
3 Quoted-printable编码方法
4 Xxencode编码
- 原理:XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符是:
+—0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
,一共64个字符。 - 与base64在字符上的差别:去掉了
/
,多了-
- 每60个编码输出(相当于45个输入字节)将输出为独立的一行,每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是
h
这个字符(45,刚好是64字符中,第45位h字符),最后一行的长度字符为剩下的字节数目在64字符中位置所代表字符。
5 UUencode编码
- 原理:Uuencode将输入资料以每三个字节为单位进行编码,如此重复进行。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6-bit为单位分 为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(
32-空白...95-下划线
) 的范围之中。每60个编码输出(相当于45个输入字节)将输出为独立的一行,每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是M
这个ASCII字符(77=32+45) ,最后一行的长度字符为32+剩下的字节数目这个ASCII字符。如果是一个0字节那它应该被转换为0X60而不是0X20,因为(前引用`) 优于0X20 (空格)。
6. URL编码
7. Escape/Unescape编码(逐渐废弃)
- 原理:Escape/Unescape加密解码/编码解码,又叫%u编码,从以往经验看编码字符串出现有
"u"
,它是unicode编码,Escape编码采用是 UTF-16BE 模式。这样一来问题非常简单了。Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉”%u”后,将16进制字符还原后,由UTF-16转码到自己目标字符。如:字符“中”,UTF-16BE是:6d93
,因此Escape是“%u6d93”,反之也一样!因为目前%字符,常用作URL编码,所以%u这样编码已经逐渐被废弃了!
8. HTML实体编码
9.敲击码
10. 摩尔斯密码
11. 盲文

12. 置换类密码的简介
- 原理:置换是一个简单的换位操作,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。
- 置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。
13.列置换
- 原理:加密将明文按固定长m分组,即每行m个字母,在密钥控制下按某一顺序交换列,最后按列优先的顺序依次读出,即产生了密文。
- 解密:逆过程。
- 解题时注意题目的提醒:todaygoodday,如果前面出现了,就把后面的去掉:todayg,按照字母顺序,结果为542163
14.周期置换
- 例:
- 密钥:置换矩阵Ek= 1 234 5- -> 2345 1
- 密文: ellcH orldw
- 明文为Hello world
15.栅栏密码
- 原理:所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第一个字母连起来,形成一段无规律的密文。注意,栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)打开栅栏密码附件。
- 例1:
- 密文: hrelldlioswmoe
- 明文就是:helloworldisme
16.曲路密码
- 曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。
- 例:
17.代换密码简介
- 对明文进行替换,一一对应的关系
18.加法密码(凯撒)
- 凯撒密码就是典型的加法密码,用后面的第三个字母代替。
- 变异凯撒:
19.埃特巴什码
- 原理:埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为特殊密钥的替换加密,也就是下面的对应关系:
20.乘法密码
- 字符 * key (mod 26)
21.仿射密码
22.密钥词组代替密码
23.培根密码
培根密码表:有时,题目会用a代表大写,b代表小写
data='bacoNisoneofaMerICaSsWEethEartSitsAdARLinGSuCCuLEntf0oDtHAtPaIRsFlawLE' cipher = '' for x in data: x = ord(x) if x<=90 and x>=65 : cipher += 'b' else : cipher += 'a' print cipher
24.ROT系列
25.猪圈密码
- 密码表:

26.Vernam 密码(维吉尼亚密码)
- 密码表:
- 明文是横行,密钥是列,密文是表格中的位置
27.希尔密码
- 希尔密码(HillCipher)是运用基本矩阵论原理的替换密码,由LesterS. Hill在1929年发明。每个字母当作26进制数字: A=0, B=1, C=2…一串字母当成n维向量,跟一个n X n的矩阵(密钥)相乘,再将得出的结果MOD 26。
- 知道密文和密钥 找 逆矩阵 ??
- https://www.cryptool.org/en/
28.playfair cipher(公平的玩)
- 原理:波雷费密码(英语: Playfair cipher)是一种对称式密码,是首种双字母取代的加密法。选取一个英文字作密钥。除去重复出现的字母。将密钥的字母逐个逐个加入5X 5的矩阵内,剩下的空间将未加入的英文字母依a-z的顺序加入。(将Q去除, 或将I和J视作同一字。)将要加密的讯息分成两个一组。若组内的字母相同,将X (或Q)加到该组的第一个字母后,重新分组。若剩下一个字,也加入X字。在每组中,找出两个字母在矩阵中的地方。
29.波利比奥斯方阵密码
波利比奧斯方阵密码(PolybiusSquareCipher或称波利比奥斯棋盘)是棋盘密码的一种,是利用波利比奧斯方阵进行加密的密码方式,简单的来说就是把字母排列好,用坐标(行列)的形式表现出来。字母是密文,明文便是字母的坐标。
30.ADFGX密码
- ADFGX密码(ADFGX Cipher)是结合了改良过的Polybius方格替代密码与单行换位密码的矩阵加密密码,使用了5个合理的密文字母:A,D,F,G,X,这些字母之所以这样选择是因为当转译成摩尔斯电码(ADFGX密码是德国军队在一战发明使用的密码)不易混淆,目的是尽可能减少转译过程的操作错误。

31.ADFGVX密码
- ADFGVX密码实际上就是ADFGX密码的扩充升级版,一样具有ADFGX密码相同的特点,加密过程也类似,不同的是密文字母增加了V,使得可以再使用10数字来替换明文。
- 通过题目给的明文,计算得到 对应的棋盘密码表
- https://xz.aliyun.com/t/3603

31.双密码
32.三分密码
- 密码表:
- 例子:
33.四方密码
- 密码表:
34.二方密码
35.自动密钥密码
36.博福特密码
37.滚动密钥密码
38.Porta密码
39.词频分析
参考
- https://www.cnblogs.com/mq0036/p/6544055.html
- python库:pycipher
- base64: https://www.cnblogs.com/peterYong/p/10959964.html