ctfshow—CRYPTO(上)
参考大佬文章CTF常见编码及加解密超全 - ruoli-s - 博客园1、密码学签到倒序python代码倒序得到flagmsg }wohs.ftc{galf print(msg[::-1])flagflag{ctf.show}2、crypto2jsfuck编码F12 -打开控制台-复制文本执行-flag{3e858ccd79287cfe8509f15a71b4c45d}jsfuck属于JavaScript 编码由6个字符[]()!组成jsfuck密文可以通过javaScript解析成明文注意控制台环境能解析JavaScript语句flagflag{3e858ccd79287cfe8509f15a71b4c45d}3、crypto3颜文字加密通过在线工具解析aaEncode 加密解密 - 工具哇在线工具flagconsole.log(flag{js_da_fa_hao});4、crypto4RSA加密算法d是e关于phi的乘法逆元import gmpy2 p447685307 q2053 e17 d gmpy2.invert(e,(p-1)*(q-1)) print(d)flagflag{594420748649}5、crypto6Rabbit加密明文是由大小写字母数字和组成的所有考虑base64加密Rabbit加密AES加密DES加密MD5加密本题是Rabbit加密在线工具https://www.sojson.com/encrypt_rabbit.htmlflagflag{a8db1d82db78ed452ba0882fb9554fc9}6、crypto7brainfuck编码的变种—ook编码BrainFuck 语言只有八种符号所有的操作都由这八种符号( - . , [ ])的组合来完成。而brainfuck编码的变种—ook编码如下:在线加密网站Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]flagflag{b615c4b79a1aede83b9ae67104ff4eb5}7、crypto8brainfuck编码BrainFuck 语言只有八种符号所有的操作都由这八种符号( - . , [ ])的组合来完成。在线加密工具Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]选择Brainfuck to text ,拿到flagflagflag{99754106633f94d350db34d548d6091a}8、crypto9surpent-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:iblock_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(fFlag: {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、crypto10Quoted-printable编码Quoted-printable编码的标识是加上十六进制在线解密网站Quoted-printable编码|Quoted-printable解码|Quoted-printable编码原理介绍--查错网funicode编码 flagflag{用你那火热的嘴唇让我在午夜里无尽的销魂}10、crypto11MD5加密MD5加密算法由数字和小写字母组成在线解密网站MD5免费在线解密破解_MD5在线加密-SOMD5flag{ctf}11、crypto0凯撒密码每一位往前移动一位即是flagflagflag{hello_ctf}12、crypto12埃特巴什码埃特巴什码使用字母表中的最后一个字母代表第一个字母倒数第二个字母代表第二个字母以此类推flagflag{Atbase_code_from_ctfshow}13、crypto13base32和base64混合解密flagflag{b4Se_Fami1y_Is_FUn}14、crypto14(进制转换base64偏移30位)二进制转十六进制十六进制转ascii然后转字符串3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uGflag(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: m2chr(int(item,16)) m2 m2.split( ) m3 for item in m2: m3chr(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: ll*(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)flagflag{ctfshow}16、EZ_avbv(easy)大佬文章ctfshow--Crypto萌新_密码5-easyrsa解题步骤_ctfshow题目代码-CSDN博客靶场没开学习了下思路xor177451812 异或密钥add8728348608 加法密钥可以猜逆向出算法如假设加密过程是密文 (明文 add) xor xor。那么解密过程就是明文 (密文 xor xor) - add。17、贝斯多少呢分组加密base62解密密文8nCDq36gzGn8hf4M2HJUsn4aYcYRBSJwj4aE0hbgpzHb4aHcH1zzC9C3IL提示说分组base62解密经过尝试11个字符为一组用CyberChef工具分别base62解密后拼接起来即是flag分组解密8nCDq36gzGn 8hf4M2HJUsn 4aYcYRBSJwj 4aE0hbgpzHb 4aHcH1zzC9C 3ILflagflag{6a5eb2_i5_u5ua11y_u5ed_f0r_5h0rt_ur1}18、find the tableF12查看审查元素这里得到数据9 57 64 8 39 8 92 3 19 99 102 74、对应元素周期表拿到flagflagflag{doyoulikesnow}