news 2026/8/23 8:58:51

ctfshow—CRYPTO(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ctfshow—CRYPTO(上)

参考大佬文章

CTF常见编码及加解密(超全) - ruoli-s - 博客园

1、密码学签到(倒序)

python代码倒序得到flag

msg = "}wohs.ftc{galf" print(msg[::-1])

flag:flag{ctf.show}

2、crypto2(jsfuck编码)

F12 ->打开控制台->复制文本执行->flag{3e858ccd79287cfe8509f15a71b4c45d}

jsfuck属于JavaScript 编码,由6个字符[]()+!组成,jsfuck密文可以通过javaScript解析成明文

注意:控制台环境能解析JavaScript语句

flag:flag{3e858ccd79287cfe8509f15a71b4c45d}

3、crypto3(颜文字加密)

通过在线工具解析:aaEncode 加密解密 - 工具哇在线工具

flag:console.log("flag{js_da_fa_hao}");

4、crypto4(RSA加密算法)

d是e关于phi的乘法逆元

import gmpy2 p=447685307 q=2053 e=17 d = gmpy2.invert(e,(p-1)*(q-1)) print(d)

flag:flag{594420748649}

5、crypto6(Rabbit加密)

明文是由大小写字母,数字和+组成的,所有考虑base64加密,Rabbit加密,AES加密,DES加密,MD5加密

本题是Rabbit加密,在线工具:https://www.sojson.com/encrypt_rabbit.html

flag:flag{a8db1d82db78ed452ba0882fb9554fc9}

6、crypto7(brainfuck编码的变种—ook编码)

BrainFuck 语言只有八种符号,所有的操作都由这八种符号(> < + - . , [ ])的组合来完成。

而brainfuck编码的变种—ook编码如下:

在线加密网站:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]

flag:flag{b615c4b79a1aede83b9ae67104ff4eb5}

7、crypto8(brainfuck编码)

BrainFuck 语言只有八种符号,所有的操作都由这八种符号(> < + - . , [ ])的组合来完成。

在线加密工具:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]

选择Brainfuck to text ,拿到flag

flag:flag{99754106633f94d350db34d548d6091a}

8、crypto9(surpent-ECB加密)

爆破压缩包密码:4132

在线工具打不开,我让AI生成的python脚本

import os from pyserpent import Serpent def decrypt_serpent_ecb_file(input_path, output_path, key): """ 使用 pyserpent 库解密 Serpent ECB 模式加密的文件 """ try: # 1. 读取密文 with open("odt-IV-00000000000000000000000000000000.dat", 'rb') as f: ciphertext = f.read() # 2. 创建 Serpent 解密器 # pyserpent 库要求密钥为字节串,长度需是16、24或32字节。 # 这里的密钥是字符串 "4132",我们将它编码为字节并补足到16字节。 key_bytes = key.encode('utf-8') if len(key_bytes) not in (16, 24, 32): # 补零到16字节 (AES/Serpent-128 的标准密钥长度) key_bytes = key_bytes.ljust(16, b'\x00') cipher = Serpent(key_bytes) # 3. 解密数据 # 库中 ECB 模式的 encrypt/decrypt 方法处理的是单个数据块 (16字节) # 我们需要自己处理多块和填充 block_size = 16 plaintext = bytearray() # 按块解密 for i in range(0, len(ciphertext), block_size): block = ciphertext[i:i+block_size] # 如果最后一块不足16字节,则不是合法的 Serpent 密文,跳过或报错 if len(block) < block_size: # 如果文件大小不是16的倍数,可能需要补全或处理,此处直接保留剩余部分(不推荐) print(f"警告:最后一块不足 {block_size} 字节,可能不是标准密文,将直接保留。") plaintext.extend(block) break decrypted_block = cipher.decrypt(block) plaintext.extend(decrypted_block) # 4. 去除 PKCS#7 填充 # pyserpent 库使用 PKCS#7 填充,需要手动去除 pad_len = plaintext[-1] if plaintext else 0 if 0 < pad_len <= block_size: # 验证填充是否有效 if all(p == pad_len for p in plaintext[-pad_len:]): plaintext = plaintext[:-pad_len] else: print("警告:无效的 PKCS#7 填充,将保留全部解密数据。") # 5. 写入明文文件 with open(output_path, 'wb') as f: f.write(plaintext) print(f"✅ 解密成功!结果已写入 {output_path}") # 6. 尝试打印明文(如果它是文本) try: flag_text = plaintext.decode('utf-8') print(f"Flag: {flag_text}") except UnicodeDecodeError: print("解密结果是二进制数据,请查看输出文件。") except FileNotFoundError: print(f"❌ 错误:找不到文件 '{input_path}',请检查路径。") except Exception as e: print(f"❌ 解密失败: {e}") # --- 脚本执行入口 --- if __name__ == "__main__": # 请根据实际情况修改文件路径 input_filename = "Serpent.dat" # 从压缩包解压出的文件 output_filename = "flag.txt" # 压缩包密码即为密钥 key = "4132" decrypt_serpent_ecb_file(input_filename, output_filename, key)

9、crypto10(Quoted-printable编码)

Quoted-printable编码的标识是=加上十六进制

在线解密网站:Quoted-printable编码|Quoted-printable解码|Quoted-printable编码原理介绍--查错网f

unicode编码 flag:flag{用你那火热的嘴唇让我在午夜里无尽的销魂}

10、crypto11(MD5加密)

MD5加密算法:由数字和小写字母组成

在线解密网站:MD5免费在线解密破解_MD5在线加密-SOMD5

flag{ctf}

11、crypto0(凯撒密码)

每一位往前移动一位即是flag

flag:flag{hello_ctf}

12、crypto12(埃特巴什码)

埃特巴什码:使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母,以此类推

flag:flag{Atbase_code_from_ctfshow}

13、crypto13(base32和base64混合解密)

flag:flag{b4Se_Fami1y_Is_FUn}

14、crypto14(进制转换+base64偏移30位)

二进制转十六进制,十六进制转ascii然后转字符串=>3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG

flag(base64)=>ZmxhZw==

通过前四位对比,字符串每一位是base64往后偏移30位组成

即,字符串每一位往前30位偏移即使flag的base64编码

大佬脚本:

m ='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' m = m.split(' ') m1 =[] for item in m: m1.append(hex(int(item,2))) m2 ='' for item in m1: m2+=chr(int(item,16)) m2 = m2.split(" ") m3 ='' for item in m2: m3+=chr(int(item,16)) #s= '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG' print(m3) #注意这里最后有个回车键 s = m3[:-1] s =str(s) t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' l="" for i in s: l += t[(t.index(i)-30)%64] ##如果不是4的倍数补上等号 if len(l)%4!=0: l=l+"="*(4-(len(l)%4)) print(l) import base64 flag = base64.b64decode(l).decode('utf-8') print(flag)

15、萌新_密码5(当铺密码)

当铺密码的的规则是用汉字的出头笔画数来代表数字

思路:三个为一组,通过规则转换为十六进制,接着转换为字符串拼接起来

大佬脚本

s = '田由中人工大王夫井羊' code = input("请输入当铺密码:") code = code.split(" ") w = '' for i in code: k = "" for j in i: k += str(s.index(j)) w += chr(int(k)) print(w)

flag:flag{ctfshow}

16、EZ_avbv(easy)

大佬文章:ctfshow--Crypto(萌新_密码5-easyrsa)解题步骤_ctfshow题目代码-CSDN博客

靶场没开,学习了下思路

xor=177451812 (异或密钥)
add=8728348608 (加法密钥)

可以猜逆向出算法,如

假设加密过程是:密文 = (明文 + add) xor xor
那么解密过程就是:明文 = (密文 xor xor) - add

17、贝斯多少呢(分组加密+base62解密)

密文:8nCDq36gzGn8hf4M2HJUsn4aYcYRBSJwj4aE0hbgpzHb4aHcH1zzC9C3IL

提示说分组base62解密,经过尝试,11个字符为一组,用CyberChef工具分别base62解密后拼接起来即是flag

分组解密:

8nCDq36gzGn 8hf4M2HJUsn 4aYcYRBSJwj 4aE0hbgpzHb 4aHcH1zzC9C 3IL

flag:flag{6a5eb2_i5_u5ua11y_u5ed_f0r_5h0rt_ur1}

18、find the table

F12查看审查元素这里,得到数据:9 57 64 8 39 8 92 3 19 99 102 74、

对应元素周期表拿到flag

flag:flag{doyoulikesnow}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 8:58:29

多智能体交互记忆系统:从理论到工程实践

1. 项目概述&#xff1a;当AI智能体拥有“集体记忆”最近在跟几个做多智能体系统的朋友聊天&#xff0c;大家不约而同地提到了一个共同的痛点&#xff1a;“智能体之间怎么才能不‘失忆’&#xff1f;”我们设计的智能体&#xff0c;单个拎出来能力都很强&#xff0c;能写代码、…

作者头像 李华
网站建设 2026/8/23 8:57:52

C++函数模板:从代码复印机到泛型编程核心

1. 项目概述&#xff1a;为什么C模板是“代码复印机”与“万能模具”&#xff1f; 刚接触C时&#xff0c;我们写函数常常会遇到这样的尴尬&#xff1a;想写一个比较两个数大小的函数&#xff0c;发现整型、浮点型、甚至自定义的类对象都需要比较&#xff0c;难道要为每种类型都…

作者头像 李华
网站建设 2026/8/23 8:56:23

2026年7月阳泉市新房价格深度分析报告

一、报告背景与数据说明本报告基于2026年7月阳泉市新房市场实际成交案例&#xff0c;结合区域分布、楼盘类型、成交价格等多维度数据&#xff0c;对当前阳泉市新房价格走势进行深度分析。报告数据来源于阳泉市住房和城乡建设部门备案信息、主要房地产经纪机构成交记录以及部分开…

作者头像 李华
网站建设 2026/8/23 8:53:54

To B 公司如果连增长都外包,还有什么不敢外包?

这两年听到一类很常见的需求&#xff1a;“我们想把市场部整体外包出去&#xff0c;最好按效果付费。” 创始人讲这个需求时&#xff0c;通常觉得自己很理性。内部招人慢&#xff0c;培养慢&#xff0c;还不一定招得到。市场部又烧钱&#xff0c;今天要内容&#xff0c;明天要活…

作者头像 李华
网站建设 2026/8/23 8:53:08

AI智能体产品经理面试20题解析与技巧

1. 面试题解析的价值与定位 AI智能体产品经理作为新兴岗位&#xff0c;其面试考核维度与传统互联网产品经理存在显著差异。这个岗位需要候选人同时具备AI技术理解力、产品设计能力和商业思维。市面上虽然有不少AI相关的面试题库&#xff0c;但大多停留在问题罗列层面&#xff0…

作者头像 李华
网站建设 2026/8/23 8:51:36

深度学习之卷积神经网络CNN及pytorch代码实现示例

一、CNN的引入 在人工的全连接神经网络中&#xff0c;每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时&#xff0c;这时全连接网络需要训练的参数就会增大很多&#xff0c;计算速度就会变得很慢&#xff0c;例如一张黑白的 2828 的手写数字图片&…

作者头像 李华