CTF 古典密码复合加密解题 WriteUp—— 栅栏密码 + 凯撒移位一

📅 2026/7/9 3:24:27
CTF 古典密码复合加密解题 WriteUp—— 栅栏密码 + 凯撒移位一
一、题目信息题型古典复合加密加密流程明文 → 2 栏栅栏加密 → 凯撒右移 5 位 → 密文题目密文TmgfKtiqBwukRvo解题要求逆推解密还原明文得到 flag二、解题思路复合加密解密核心规则加密顺序为先栅栏、后凯撒解密操作需要完全反向先解开凯撒移位再解密栅栏密码。 解密顺序密文 → 凯撒左移 5 位解密 → 2 栏栅栏解密 → 原始明文三、分步手动解密步骤 1凯撒密码解密偏移量 - 5字母映射规则A0B1 … Z26超出范围对 26 取模。 逐字符计算 T (19)-514 → O m (12)-57 → h g (6)-51 → b f (5)-50 → a K (10)-55 → F t (19)-514 → O i (8)-53 → D q (16)-511 → L B (1)-5-4 → 22 → W w (22)-517 → R u (20)-515 → P k (10)-55 → F R (17)-512 → M v (21)-516 → Q o (14)-59 → J凯撒解密后字符串OhbaFODLWRPMQJ步骤 22 栏栅栏密码解密字符串总长度 14均分两行前 7 字符为第一行后 7 字符为第二行 第一行O b F D W M Q 第二行h a O L R P J按列交替读取字符O→h→b→a→F→O→D→L→W→R→P→M→Q→J 最终明文OhbaFODLWRPMQJ步骤 3、提取 Flag标准 CTF 格式 flagflag{OhbaFODLWRPMQJ}四、工具快速解密CyberChef实战比赛可使用 CyberChef 工具一键解密操作流程输入框填入密文TmgfKtiqBwukRvo依次添加两个算子Caesar Shift偏移值填写-5Rail Fence Decode栏数设置2输出区域直接获取明文规避手动计算失误。五、自动化 Python 解密脚本python运行def caesar_decrypt(s, offset): res for c in s: if c.isupper(): res chr((ord(c) - ord(A) - offset) % 26 ord(A)) elif c.islower(): res chr((ord(c) - ord(a) - offset) % 26 ord(a)) else: res c return res def rail2_decrypt(text): length len(text) mid (length 1) // 2 line1 text[:mid] line2 text[mid:] plain for a, b in zip(line1, line2): plain a b if len(line1) len(line2): plain line1[-1] return plain # 执行解密 cipher_text TmgfKtiqBwukRvo temp_text caesar_decrypt(cipher_text, 5) result rail2_decrypt(temp_text) print(f解密得到flag: flag{{{result}}})六、总结与知识点复盘复合加密解密顺序不能颠倒加密 A 后 B解密必须先 B 后 A凯撒密码运算注意取模字符序号为负数时加 26 完成循环栅栏密码解密核心是分行后按列读取固定栏数可直接拆分字符串学习建议新手先手动演算理解原理赛场使用工具 / 脚本提升效率。