BUUCTF Crypto 密码学题解
BUUCTF Crypto 密码学题解
lololowe1. 一眼就解密
题目给出的字符串为:
1 | ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30= |
第一眼看到末尾的=
,80%可以确定是base64编码,使用 https://rivers.chaitin.cn/toolkit/cyberChef/Base64Decoder 解码后如下:
成功得到flag:
1 | flag{THE_FLAG_OF_THIS_STRING} |
技巧:
- Base64编码后的字符数如果不是4的倍数,则会在末尾添加等于号
=
字符,直到字符数是4的倍数,因此,如果看到末尾有等于号=
字符,可以判断可能是Base64编码。- Base64编码表中的字符只会包括大小写字母,数字,加号
+
和斜杠/
,因此,如果看到字符串中只包含这些字符,可以判断可能是Base64编码。- Base64编码原理介绍可以看我以前写的博客:https://blog.lololowe.com/posts/351b/#Base64%E7%BC%96%E7%A0%81
2. MD5
下载附件得到题目给出的字符串:
1 | e00cf25ad42683b3df678c61f42c6bda |
由于题目直接告诉了我们这是MD5相关的内容,因此可以直接用 https://md5hashing.net/search 搜索此MD5哈希值:
将转换后的值包裹上flag{} ,得到flag:
1 | flag{admin1} |
技巧:
- MD5哈希值是固定32位长的十六进制数(只包含数字0-9以及字母a-f),因此,如果看到字符串是32位长的十六进制数,可以判断可能是MD5哈希值。
- 拿到MD5哈希值后,不建议直接爆破,太慢了,推荐直接使用谷歌进行搜索,但注意要将MD5哈希值用双引号包裹起来,这样结果只会匹配到MD5哈希值,不会匹配到其他内容。
3. URL编码
下载附件得到题目给出的字符串:
1 | %66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d |
由于题目直接告诉了我们这是URL编码相关的内容,因此可以直接用 https://www.urldecoder.org/ 解码:
得到flag:
1 | flag{and 1=1} |
技巧:
- URL编码是固定以
%
开头,后面跟着两位十六进制数的字符,因此,如果看到字符串是这种格式,可以判断可能是URL编码。- URL编码原理介绍可以看我以前写的博客:https://blog.lololowe.com/posts/351b/#URL%E7%BC%96%E7%A0%81
4. 看我回旋踢
下载附件得到题目给出的字符串:
1 | synt{5pq1004q-86n5-46q8-o720-oro5on0417r1} |
由于题目名字很抽象,无法直接判断是什么编码,此时可以先从字符串格式入手。字符串格式为synt{}
,很像flag{}
,可以想想synt
怎么和flag
对应起来。
初步分析后,可以发现synt
中的每个字母向后移位13个位置,可以得到flag
,因此可以判断这是ROT-13密码(偏移量为13的凯撒密码):
1 | s y n t |
那么花括号里剩余的字母就可以直接使用在线工具 https://www.metools.info/code/c70.html 进行ROT-13解码:
得到flag:
1 | flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1} |
5. 摩丝
下载附件得到题目给出的字符串:
1 | .. .-.. --- ...- . -.-- --- ..- |
由于题目直接告诉了我们这是摩斯电码相关的内容,因此可以直接用 https://www.jisuan.mobi/tools/morse/ 进行解码:
包裹上flag{}后得到flag:
1 | flag{ILOVEYOU} |
6. password
下载附件得到题目给出的字符串:
1 | 姓名:张三 |
题目告诉我们,key格式为key{xxxxxxxxxx}
,其中xxxxxxxxxx
有10位,而姓名与生日拼接起来正好是10位,因此,我们可以尝试将姓名和生日拼接起来,作为key,然后提交flag:
1 | flag{张三19900315} |
提交失败,尝试将”张三”改为拼音首字母”zs”,再次提交flag:
1 | flag{zs19900315} |
成功提交。我猜测这道题可能考察的是简单字符串拼接以及格式化字符。
7. 变异凯撒
下载附件得到题目给出的字符串:
1 | 加密密文:afZ_r9VYfScOeO_UL^RWUc |
由于题目告诉了我们这是变异凯撒密码,因此简单的26位字母表已经无法判断加密密文中的特殊字符偏移量了,可以上ASCII码表了。
首先截取加密密文的前4位afZ_
,将其ASCII码值转换为十进制并与flag
的ASCII码值的十进制做对比:
1 | a:97 f:102 Z:90 _:95 |
十进制数值相减计算偏移量(差值):
1 | 102-97=5 |
可以发现,相邻的2个字符之间的偏移量是呈递增关系的,因此可以按照这个规律来解密后面的字符:
1 | {Caesar_variation} |
也可以用Python脚本解密:
1 | caesar = "afZ_r9VYfScOeO_UL^RWUc" |
得到flag:
1 | flag{Caesar_variation} |
8. Quoted-printable
下载附件得到题目给出的字符串:
1 | =E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6 |
由于题目直接告诉了我们这是Quoted-printable编码(可打印字符引用编码)相关的内容,因此可以直接用 https://mdgjx.com/shujugeshizhuanhuan/qpjiema 解码:
包裹上flag{}后得到flag:
1 | flag{那你也很棒哦} |
技巧
- Quoted-printable编码是固定以
=
开头,后面跟着两位十六进制数的字符,因此,如果看到字符串是这种格式,可以判断可能是Quoted-printable编码。- Quoted-printable编码非常像URL编码,但是URL编码是固定以
%
开头,后面跟着两位十六进制数的字符。
9. 篱笆墙的影子
下载附件得到题目给出的字符串:
1 | felhaagv{ewtehtehfilnakgw} |
题目中提到的的关键字”篱笆”,又被称为”栅栏”,因此可以判断这是栅栏密码相关的内容。
在字符串”felhaagv{ewtehtehfilnakgw}”中可以发现4个关键字符”f l a g”,并且这些字符是按顺序排列的,每个字符之间间隔了1个字符,因此可以判断该栅栏有2组。
将字符串”felhaagv{ewtehtehfilnakgw}”按照2组排列(上下对应),得到:
1 | flag{wethinkw |
将1、2组的字符分别拼接起来,得到flag:
1 | flag{wethinkwehavetheflag} |
也可以直接将字符串复制到 http://moersima.00cha.net/shanlan.asp 进行解密:
得到flag:
http://moersima.00cha.net/shanlan.asp 下面的关于栅栏密码加解密的描述很形象,推荐去阅读下。
技巧:
- 判断是否为传统栅栏密码可以通过观察字符串中是否包含”flag”关键字,并且这些关键字是按顺序排列的,每个字符之间间隔了相同数量的字符。
10. Rabbit
下载附件得到题目给出的字符串:
1 | U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI |
Rabbit 加密可以直接用 https://www.sojson.com/encrypt_rabbit.html 进行解密:
得到flag:
1 | flag{Cute_Rabbit} |
技巧:
- 记住Rabbit加密的格式为
U2FsdGVkX1/xxxxxxxx
,其中xxxxxxxx
是加密后的密文。