信息安全基础能力训练-crypto
信息安全基础能力训练-crypto
xxfer题目一
大帝的密码武器
题⽬描述:
公元前⼀百年,在罗马出⽣了⼀位对世界影响巨大的人物,他生前是罗马三巨头之⼀。他率先使⽤了⼀种简单的加密函,因此这种加密方法以他的名字命名。
加密后:FRPHQZSX
目标:得到明文信息
解题思路
凯撒密码就是将明文信息进行移位;
密钥就是1-26作为移位的依据;
因为题目并没有给出对应密钥,所以需要遍历密钥空间,将所有可能的明文信息列出来,根据分析得到真正的明文即可;
代码如下:
1 | def caesar(ciphertext): |
运行结果
输出26种可能的明文信息列表:
[‘eqogpyrw’, ‘dpnfoxqv’, ‘comenwpu’, ‘bnldmvot’, ‘amkcluns’, ‘zljbktmr’, ‘ykiajslq’, ‘xjhzirkp’, ‘wigyhqjo’, ‘vhfxgpin’, ‘ugewfohm’, ‘tfdvengl’, ‘secudmfk’, ‘rdbtclej’, ‘qcasbkdi’, ‘pbzrajch’, ‘oayqzibg’, ‘nzxpyhaf’, ‘mywoxgze’, ‘lxvnwfyd’, ‘kwumvexc’, ‘jvtludwb’, ‘iusktcva’, ‘htrjsbuz’, ‘gsqiraty’]
根据分析,有效的明文信息为flag{comenwpu};
题目二
栅栏密码
题目描述:
题目字数分组,密文:fsf5lrdwacloggwqi11l
解题思路
栅栏密码原理
加密:
把将要传递的信息中的字母交替排成上下两行
例:栏数为2(栏数相当于密钥)
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
密文:
TEOGSDYUTAENN HLNETAMSHVAED
解密:
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
明文:
THE LONGEST DAY MUST HAVE AN END
题目没有提供栅栏栏数,因此不知道应该将密文分为几部分,需要尝试多种栏数;
一般会取密文长度的因数作为栏数,本题密文长度为20;
先得到密文长度的因数,然后遍历因数列表,将因数作为栏数,把不同结果输出到结果列表中;
最终通过对结果的分析得到真正的明文信息即可;
1 | def fence(ciphertext): |
运行结果
result_list 输出:
[‘fsf5lrdwacloggwqi11l’, ‘flsofg5glwrqdiw1a1cl’, ‘frlqsdoifwg15ag1lcwl’, ‘flagisrcg1fdlw15woql’]
根据分析,’flagisrcg1fdlw15woql’ 为有效信息;
题目三
题目描述:
小猪佩奇!
解题思路
猪圈密码工作原理
将字母表中的每个字母分配给特定形状的方括号或“猪圈”。写秘密信息时,不用写字母,而是画出每个字母所在的方括号。
查找到猪圈密码表:
根据密码表,将密文解码即可;
运行结果
flag{THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG}
题目四
看我回旋踢
一共踢了 13 脚
题目描述:
synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}
解题思路
使用的是ROT-13编码,将明文或密文中的英文字母替换成对应的英文字符即可;
代码如下:
1 | def rot13(ciphertext): |
运行结果
flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
题目五
Uuencode
题⽬描述:
密文:89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]
解题思路
UUE 编码原理
用3个字节数据列成一组(不足3个字节以零补齐),此24位数据分为4 组,每组6位,再将得到的6位二进制数映射到ASCII码32~95之间的字符;
这种编码方式和base64类似,通过二进制重新分组后转换为对应的ASCII码。本题其实就是这种编码的解码过程;
需要注意的是密文中第一个字符,如果第一个字符不为 ’M‘ ,说明需要解码的数据所对应的明文信息不足45个字节,否则说明需要解码的数据不止一行。因为本题密文信息首位为 ’8‘,所以只需要处理破解一行数据即可;
将每个字符的 ASCII 值减去32后转换为6为二进制码,添加到 binary 字符串中;
将 binary 字串以 8 位为一组转换为 ASCII 码即可;
代码如下:
1 | def uue_code(ciphertext): |
运行结果
flag{dsdasdsa99877LLLKK}
题目六
滴答滴答
题⽬描述:
福尔摩斯表
解题思路
对照摩斯密码表进行解码即可;
运行结果
flag{ALP5ALAB}
题目七
base 家族
题目描述:
我喜欢贝丝,但是贝丝的表妹喜欢我 还给了我一封情诗
MZWGCZ33MVZGQZLJL5STQOJTGRPWK4SVJ56Q====
解题思路
根据密文中最后的等号个数可以判断属于 base32 编码,编码原理与 base64 类似,使用 base64 模块中的 base32 解码函数进行解码即可;
1 | #调用base64模块的函数实现 |
1 | #不调用base64模块函数实现 |
运行结果
flag{erhei_e8934_erUO}
题目八
敲击
题目描述:
方方格格,不断敲击 “wdvtdz qsxdr werdzxc esxcfr uygbn“
解题思路
根据题目描述,联想到 26 键键盘,通过密文中字母在键盘中的位置可以得出相对应的字母明文;
脑洞是真的大呀!
运行结果
flag{x v z o c}