文章目录
-
- Crypto
-
- 题目1 一眼就解密
- 题目2 md5
- 题目3 Url编码
- 题目4 看我回旋踢
- 题目5 摩丝
- 题目6 passwd
- 题目7 变异凯撒
- 题目8 Quoted-printable
- 题目9 Rabbit
- 题目10 篱笆墙的影子
- 题目11 RSA
- 题目12 丢失的MD5
- 题目13 Alice与Bob
- 题目14 大帝的密码武器
- 题目15 rsarsa
- 题目16 Windows系统密码
- 题目17 信息化时代的步伐
- 题目18 凯撒 替换 呵呵!
- 题目19 萌萌哒的八戒
- 题目20 传统知识+古典密码
- 题目21 权限获得第一步
- 题目22 RSA1
- 题目23 世上无难事
- 题目24 old-fashion
- 题目25 Unencode
BUUCTF(新靶场,难度中上,搜集了很多大赛原题)
https://buuoj.cn/
https://buuoj.cn/challenges
Crypto
题目1 一眼就解密
题目
下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=注意:得到的 flag 请包上 flag{} 提交
解题思路
题目后面有=就先猜一手base64编码,直接复制base64解码 解密即可得到flag
flag
flag{THE_FLAG_OF_THIS_STRING}
题目2 md5
题目
e00cf25ad42683b3df678c61f42c6bda
解题思路
题目名字就叫MD5,那我们直接把这个复制到md5在线解密 即可得到flag
md5在线查询
admin1
加上flag{},即flag{admin}提交
flag
flag{admin}
题目3 Url编码
题目
%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d
解题思路
老规矩这种题目直接复制url解码 里面解密即可得到flag
解码得and 1=1
flag
flag{and 1=1}
题目4 看我回旋踢
题目
看我回旋踢 synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}
注意:得到的 flag 请包上 flag{} 提交
解题思路1
直接复制到CTFcrackToolsv里面解密
Rot13解码: ★ flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
Rot18解码: ★ flag{0cd6559d-31a0-91d3-b275-beb0ba5962e6}
解题思路2
可以看到,字符串基本是还是对应上了flag的格式,不难想到是单字母替换加密
这一题可以直接尝试爆破,令"synt" = "flag"即可,简单的暴力美学
常用的爆破网站 https://quipqiup.com/
先尝试了凯撒加密,代码如下:
import string
def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
lower = string.ascii_lowercase #小写字母
upper = string.ascii_uppercase #大写字母
before = string.ascii_letters #无偏移的字母顺序 小写+大写
after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
#分别把小写字母和大写字母偏移后再加到一起
table = ''.maketrans(before, after) #创建映射表
return s.translate(table) #对s进行偏移 即加密
if __name__ == "__main__":
s = "synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}"
offset = ord('f') - ord('s')#计算偏移量
#print(offset)
print(kaisa(s, offset))
flag
flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
题目5 摩丝
题目
摩丝 .. .-.. --- ...- . -.-- --- ..-
注意:得到的 flag 请包上 flag{} 提交
解题思路
摩斯解码得ILOVEYOU
flag
flag{ILOVEYOU}
题目6 passwd
题目
姓名:张三
生日:19900315
key格式为key{xxxxxxxxxx}
注意:得到的 flag 请包上 flag{} 提交
解题思路
看到key{xxxxxxxxxx}中key的长度为10位,联想到张三可能取密码的习惯,根据题目信息无非就那么几种
zs19900315
19900315zs
1990zs0315
稍作尝试可得到正确答案
flag
flag{zs19900315}
题目7 变异凯撒
题目
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }
注意:得到的 flag 请包上 flag{} 提交
解题思路
看不出字符串是怎么处理的,但是标题给了提示,肯定是基于凯撒加密的
凯撒加密老规矩,先将前四个字符猜测为flag,然后仔细分析可以发现偏移量不是固定值
a -> f 移位5
f -> l 移位6
Z -> a 移位7
可以看出是一个递增的偏移量,那么直接上代码:
c = "afZ_r9VYfScOeO_UL^RWUc"
m = ''
for i in range(len(c)):
m += chr(ord(c[i]) + 5 + i)
print(m)
flag
flag{Caesar_variation}
题目8 Quoted-printable
题目
=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6
注意:得到的 flag 请包上 flag{} 提交
解题思路
首先这个题目就是试一加密编程
试一我们直接用Quoted-printable解密 即可
Quoted解码: 那你也很棒哦
flag
flag{那你也很棒哦}
知识拓展
quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法
任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值 例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示
ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行,即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中
题目9 Rabbit
题目
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
注意:得到的 flag 请包上 flag{} 提交
解题思路
题目叫Rabbit这是一个加密,我们直接Rabbit在线解密 即可
Rabbit 在线解密 http://www.jsons.cn/rabbitencrypt/
Cute_Rabbit
flag
flag{Cute_Rabbit}
知识拓展
Rabbit
https://blog.youkuaiyun.com/l2645470582_/article/details/121372104
Rabbit 是一种高速流密码,Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该加密算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。
知识点
rabbit解密
密文特征与base64类似,末尾会有==
若base64等解不通,可以尝试rabbit解密
题目10 篱笆墙的影子
题目
felhaagv{ewtehtehfilnakgw}
星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 注意:得到的 flag 请包上 flag{} 提交
解题思路
不难看出字符串仍具有类似flag的格式,由于’{'前面并非四个字符,首字符’f’也没有被替换,所以应该不是凯撒加密,或单字母替换
再根据标题提示信息,猜测是栅栏密码,前面1,3,5,7位连结有"flag",故有两栏:
f l a g { w e t h i n k w
e h a v e t h e f l a g }
用栅栏在线解密即可
栅栏密码
分为2栏,解密结果为:flag{wethinkwehavetheflag}
flag
flag{wethinkwehavetheflag}
题目11 RSA
题目
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交
注意:得到的 flag 请 将 noxCTF 替换为 flag ,格式为 flag{} 提交。
解题思路1
# -*- coding:utf-8 -*-
import gmpy2, libnum
from Crypto.Util.number import long_to_bytes
import gmpy2
p = 473398607161
q = 4511491
e = 17
d = gmpy2.invert(e,(p-1)*(q-1))
print(d)
# 125631357777427553
解题思路2
学习RSAtool2的使用:
1.Number Base 设置为十进制
2.注意:Public Exponent这里要使用16进制的数,如果公钥e=17的话,就应该填入十六进制的11
3.给出p,q,e的话直接填入,再点击Calc.D,获得d
4.给出的是n和e的话,输入n和e,点击Factor N(分解),得到p,q,再重复第3步就能得到d了
注意e填进去是16进制,需要将17转hex得到11再填进去
用RSA-Tool 2 by 1E!即可
RSA-Tool下载链接
题目12 丢失的MD5
题目
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print des
注意:得到的 flag 请包上 flag{} 提交
已知部分明文和明文的部分MD5值,求解明文及MD5
解题思路
已知部分明文和明文的部分MD5值,求解明文及MD5
直接遍历缺失的字符,验证补全的字符串与泄露的部分MD5能否对上即可
附上代码:
看代码用python2.x的版本运行即可获得flag
# -*- coding:utf-8 -*-
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode('utf8'))
des=m

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



