网络安全 CTF CTFshow CTFshow 密码学签到-crypto14 保姆级教程 Xiaozhi_z 2025-07-04 2025-07-23 密码学签到
倒叙排列解出密码 flag{ctf.show}
crypto2
打开文档发现长这样
推断为JsFuck
1 2 JSFuck是基于JavaScript原子部分的深奥和教育性编程风格。它仅仅使用六个不同的字符来编写和执行代码。 分别是:{ } [ ] + !
F12谷歌浏览器打开控制台输入即可解密
crypto3
打开文件 发现一堆颜文字
发现是AAEncode编码
1 2 aaEncode 是一种简单的 JavaScript 加密/混淆工具,可以将 JavaScript 代码转换成一系列看似无意义的颜文字字符。它采用了基于 ASCII 的双重编码方法,使得代码难以被解读。 aaEncode 的工作原理非常简单,它将原始的 JavaScript 代码进行转换,将其中的特殊字符、函数名和变量名等信息进行替换和编码,生成一段新的代码。
解密方式一 打开F12控制台 输入即可解密
解密方式二 使用AAEncode在线解密工具
crypto4
1 2 3 题目 p=447685307 q=2037 e=17 提交flag{d}
Python代码(CTF_Show Copy)
执行即可得到答案
1 2 3 4 5 6 7 p = 447685307 q= 2037 e =17 n = (p-1)*(q-1) d = (n+1)//e print (d)
crypto5
1 2 3 题目 p=447685307 q=2037 e=17 c=704796792 提交flag{m}
使用RSA-Tool进行求d
注意 E为十六进制 所以是 11
使用python的Pow函数
在Python中,pow(c, d, n)
函数是一个内置函数,用于计算c
的d
次幂对n
取模的结果。换句话说,它计算的是(c**d) % n
的值。这个函数特别有用,特别是在密码学和编程竞赛中,因为它允许你在不直接计算大数幂的情况下,快速得到一个数的幂对另一个数的模。
1 2 3 4 c = 704796792 d = 53616899001 n = 911934970359 print(pow(c,d,n))
得出m = 904332399012
crypto6
1 2 3 4 5 6 7 题目如下 密钥为 加密方式 名称,区分大小写 密文: U2FsdGVkX19mGsGlfI3nciNVpWZZRqZO2PYjJ1ZQuRqoiknyHSWeQv8ol0uRZP94MqeD2xz+ 密钥: 加密方式名称
查看加密方式
U2FsdGVkX1开头的可能是rabbit,AES,DES,此题为Rabbit加密
进行解密即可
crypto7
打开题目 如下
猜测使用的Okk加密方式 解密即可
crypto8
1 2 3 4 5 6 7 8 9 10 11 12 13 题目如下: 口出F伸中指 +++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< +++++ +++[- >---- ----< ]>--. .--.- -.-.- --.-. +++++ +..-- -..<+ +++++ +[->+ +++++ +<]>+ +.<++ ++++[ ->--- ---<] >---- ----- .---- -.<++ ++++[ ->+++ +++<] >++++ +++++ +++.< +++++ ++[-> ----- --<]> .++.- ----. <++++ +++[- >++++ +++<] >+++. --.<+ +++++ [->-- ----< ]>--- ----- ---.+ .<+++ +++[- >++++ ++<]> +++++ +++++ ++.<+ +++++ [->-- ----< ]>--- ----- ---.- .++++ .<+++ +++[- >++++ ++<]> +++++ +++.< +++++ +[->- ----- <]>-- ----- ---.- ----- .++++ +++++ .---- ----. <++++ ++[-> +++++ +<]>+ +++++ +++++ +.<++ +++[- >++++ +<]>+ ++.<
使用Baifuck密码解密即可
bainfuck密码 特征:BrainFuck 语言只有八种符号,所有的操作都由这八种符号 (> < + - . , [ ]) 的组合来完成
crypto9
打开压缩包发现有密码
使用Ziperello暴力破解压缩包密码
得到密码为4132
解压出内容如下
文件夹名称为serpent,推测为serpent加密
使用 http://serpent.online-domain-tools.com/ 进行解密
删掉空格提交即可
crypto10
1 2 3 题目如下 =E7=94=A8=E4=BD=A0=E9=82=A3=E7=81=AB=E7=83=AD=E7=9A=84=E5=98=B4=E5=94=87=E8=AE=A9=E6=88=91=E5=9C=A8=E5=8D=88=E5=A4=9C=E9=87=8C=E6=97=A0=E5=B0=BD=E7=9A=84=E9=94=80=E9=AD=82
发现是Quoted-Printable编码 解码即可
任何一个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编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.
crypto11
1 2 题目如下 密文:a8db1d82db78ed452ba0882fb9554fc
使用穷举找到md5缺失的一位
a8db1d82db78ed452ba0882fb9554fc(31 位)
正确的 MD5 应该是数字和字母的组合,并且是 16 位或者 32 位。
a8db1d82db78ed452ba0882fb9554fc_(0 ~ f)
a8db1d82db78ed452ba0882fb9554fc9
一眼看出来是md5加密 彩虹表解密即可
crypto0
看出来很像凯撒密码
枚举解密即可
crypto12
1 2 3 题目如下 uozt{Zgyzhv_xlwv_uiln_xguhsld}
判断为埃特巴什码 解密即可(记得大小写)
埃特巴什码的特征是所有字母表的字母都被颠倒,如a-z、b-y,本题的前四个字母uozt-flag,符合这个特征,所以就找个网站解开就好了 网站
crypto13
压缩包解压内容如下 文件特别长 末尾为= 推测为base64编码
使用Python解码即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import base64 def base(s): try: s = base64.b32decode(s) s = base(s) except: try: s = base64.b64decode(s) s = base(s) except: return s return s f = open('base.txt') text = f.read() print(base(text))
crypto14
1 2 3 题目如下: 感谢@星河皆灿烂提供的题目 00110011 00110011 00100000 00110100 00110101 00100000 00110101 00110000 00100000 00110010 01100110 00100000 00110011 00110011 00100000 00110101 00110110 00100000 00110100 01100101 00100000 00110100 00110110 00100000 00110100 00110110 00100000 00110110 01100100 00100000 00110100 01100101 00100000 00110100 00110101 00100000 00110100 00110001 00100000 00110110 01100101 00100000 00110110 01100011 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110100 00100000 00110100 00110011 00100000 00110100 01100100 00100000 00110110 01100100 00100000 00110101 00110110 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110001 00100000 00110110 00110100 00100000 00110011 00111001 00100000 00110111 00110101 00100000 00110100 00110111 00100000 00110000 01100001
0和1 一眼二进制解码 转换成十六进制 得到
0x3333203435203530203266203333203536203465203436203436203664203465203435203431203665203663203438203434203335203634203433203464203664203536203438203434203335203631203634203339203735203437203061
在线网站为 https://www.lzltool.cn/Tools/BinToHex
将十六进制转化为文本
再一次转换得到3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG
对数据进行字符映射 填充处理 Python脚本如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import base64 def decode_custom_base64(encoded_str): # 定义base64字符集 t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' # 字符位移处理 l = "" for i in encoded_str: l += t[(t.index(i)-30)%64] # 补全base64长度 if len(l)%4 != 0: l += "="*(4-(len(l)%4)) # base64解码 try: flag = base64.b64decode(l).decode('utf-8') return flag except Exception as e: return f"解码失败: {str(e)}" # 示例用法 if __name__ == "__main__": # 这是原代码中的输入字符串 s = '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG' result = decode_custom_base64(s) print("解码结果:", result)
打印得到Flag