文章总结: 本文是CTF入门教程,聚焦Misc方向的编码与古典密码。核心要点包括Base64、Hex、URL等常见编码的识别与解码方法,以及凯撒、维吉尼亚、Atbash等古典密码的原理。文章推荐使用CyberChef等工具进行自动化解码,并强调掌握这些基础技能是CTF比赛的关键。可操作建议是新手应花时间专门练习编码题,熟悉特征识别,以快速解决比赛中的基础题目。 综合评分: 84 文章分类: CTF,WEB安全,安全意识,安全工具,实战经验
CTF入门|第8期 Misc入门:编码与古典密码
原创
安全值班室 安全值班室
安全值班室
2026年7月16日 09:00 北京
在小说阅读器读本章
去阅读
CTF中的Misc(杂项)方向包罗万象,但最基础的入门题型莫过于编码解码和古典密码。无论是Base64解码还是凯撒密码,这些看似简单的知识点在CTF比赛中出现频率极高——很多题目都会把Flag先用某种编码处理一遍,增加逆向难度。掌握这些基础技能,就等于拿到了CTF比赛的第一把钥匙。
本期速览① 常见编码:Base64/Hex/URL/Base32/Base58 解码实战② 古典密码:凯撒、维吉尼亚、Atbash、培根密码 ③ 密码工具:CyberChef和在线密码工具箱 ④ 摩斯密码与旗语:CTF中的信号编码题型 ⑤ 综合实战:拆解一道编码类CTF真题
一、常见编码:CTF中的”第一道防线”
编码不是加密,但它在CTF中起到了”隐藏信息”的作用。比赛中常见的套路是:题目给出的文本看起来是一堆乱码,实际上只是经过了一层或多层编码。最经典的莫过于看到一个ZmxhZw==就知道这大概率是Base64编码。
- Base64编码
Base64是CTF中出场率最高的编码方式。它的原理是将二进制数据每3个字节一组(24bit),分成4组6bit,每组映射到一个可打印字符(A-Za-z0-9+/),最后补足=号。判断一段文本是否是Base64很简单:看它是否只包含A-Za-z0-9+/=,且长度是4的倍数。更明显的特征是结尾的等号——当然也有无等号变种。
# Base64原始: Hello | Base64: SGVsbG8=# Python解码import base64base64.b64decode("SGVsbG8=") # b'Hello'# CTF特征ZmxhZ3s... # flag{ 编码开头Vm0wd2QyUX... # 多层循环编码特征
- 十六进制与ASCII
Hex编码(十六进制)也是CTF中常见的编码方式。一串十六进制字符串如”666C6167″对应的就是”flag”的ASCII码。在CTF中,Hex编码常以\x开头(C风格)或0x开头出现,也可能直接在题目中用连续十六进制字符表示。ASCII码的十进制/八进制形式也会出现,建议牢记几个关键字符的编码值:A=65、a=97、0=48、{=123。
# Hex解码hex_str="666C61677B746573745F6865787D"bytes.fromhex(hex_str).decode() # flag{test_hex}# ASCII十进制"102 108 97 103" → flag# \x十六进制格式\x66\x6c\x61\x67 → flag
- URL编码
URL编码(Percent-Encoding)在Web方向的CTF题中极其常见。它的形式是%后跟两位十六进制,例如%66%6c%61%67代表flag。URL编码常用于绕过WAF检测或隐藏敏感字符。注意:有时候题目会进行双重URL编码(%25变成%),这时需要多层解码才能看到真实内容。
# URL编码原始:flag{test} 编码:%66%6c%61%67%7b%74%65%73%74%7d# 双重编码 %25%36%36... 需解码两次# Python解码from urllib.parse import unquoteunquote("%66%6c%61%67") # flag
- 其他常见编码
| 编码类型 | 特征 | CTF常见场景 | | — | — | — | | Base32 | 大写字母+数字2-7,无等号或=号 | 文件名、图片Exif信息 | | Base58 | 去掉0/O/I/l的Base64变种 | 比特币地址相关题 | | Base36 | 数字+小写字母 | 短链接/压缩表示 | | Quoted-Printable | =后跟两位Hex | 邮件编码题 | | Unicode编码 | \u0066\u006c形式 | JavaScript混淆 | | UUencode | 以M开头的行 | 老旧系统中的编码 |
二、古典密码:CTF中的经典题型
古典密码虽然早已不适合现代通信加密,但在CTF中仍然是高频考点。它们的特点是不依赖计算机的复杂运算,而是通过替换或移位来隐藏信息。由于许多古典密码没有密钥或密钥空间极小,在CTF中往往考的是“识别”而非“破解”。
- 凯撒密码(Caesar Cipher)
凯撒密码是最简单的移位密码——将字母表中的每个字母向后(或向前)移动固定位数。CTF中最经典的特征是:一段看起来像英文的乱码,字母都在A-Z范围内,但拼不出有意义的单词。这时候尝试暴力枚举所有25种移位,看哪一组能组成英文单词或Flag格式。RoT13(移位13位)作为凯撒的特例,在CTF中出场率极高,因为它是字母表的一半,编码解码用同一个操作。
# 凯撒密码cipher = "judwgu{F3S0_K3D0_Q0P_L3D_U3ID9}"# 移位3解密得flag{C3R0_C3S0_R0S_I3S_F3RG9}def caesar_decrypt(text,shift): res="" for c in text: if c.isalpha(): base=ord("A")if c.isupper()else ord("a") res+=chr((ord(c)-base-shift)%26+base) else:res+=c return res
- 维吉尼亚密码(Vigenère Cipher)
维吉尼亚密码是凯撒密码的升级版——它使用一个关键词作为密钥,每个字母的移位量由关键词对应位置的字母决定。在CTF中,维吉尼亚密码的特征是:明文和密文都是英文字母,但相同的字母在密文中被加密成不同的字符。常见解题方法包括Kasiski测试(找重复子串求密钥长度)和Index of Coincidence(重合指数法)。不过大部分CTF题目会直接给出密钥或密钥提示。
# 维吉尼亚密码# KEY+HELLO → RIJVS# 工具:dcode.fr/vigenere-cipher / CyberChef-Vigenère Decodedef vigenere_decrypt(cipher,key): res="" k=0 for c in cipher: if c.isalpha(): base=ord("A")if c.isupper()else ord("a") s=ord(key[k%len(key)].upper())-ord("A") res+=chr((ord(c)-base-s)%26+base) k+=1 else:res+=c return res
- Atbash密码
Atbash密码是字母表的镜像替换——A↔Z、B↔Y、C↔X……它的特点是字母位置对称,即加密和解密是同一个操作。在CTF中,Atbash密码常与其他编码组合使用。识别特征非常明显:如果一段文本看起来字母完全反过来了(例如zool代表“lloo”对应的词),那很可能就是Atbash密码。
# Atbash密码# ATBASH → ZGYZHSdef atbash(text): res="" for c in text: if c.isalpha(): base=ord("A")if c.isupper()else ord("a") res+=chr(base+25-(ord(c)-base)) else:res+=c return res# CyberChef搜索Atbash一键解码
- 培根密码(Bacon Cipher)
培根密码用5位二进制(A/B)来表示一个字母,如AAAAA代表A、AAAAB代表B。CTF中培根密码的识别特征是:一段只包含两种字符(或两种字体/大小写)的文本,长度是5的倍数。常见的变种是用字体差异、大小写差异、甚至空白字符差异来隐藏编码。例如一段看起来正常的话,但部分字母是大写——大写算B、小写算A,连起来就是培根密码。
# 培根密码# A=0 B=1,AABBB=00011→D# 大小写隐写:小写A/大写B,拼接二进制串# 工具:www.dcode.fr/bacon-cipher
三、摩斯密码与信号编码
摩斯密码是CTF中Misc方向的经典题型。它将字母用点(.)和划(-)的组合表示,字母之间用空格分隔,单词之间用斜杠(/)分隔。CTF中常见的形式包括:音频文件中的滴答声、图片中的点划图案、甚至一段文本中的点和短横线被伪装成其他符号。
# 摩斯密码.... . .-.. .-.. --- .-- --- .-. .-.. -.. → HELLO WORLD# 字母.-=A -...=B -.-.=C -..=D .=E..-.=F --.=G ....=H ..=I .---=J-.-=K .-..=L --=M -.=N ---=O.--.=P --.-=Q .-.=R ...=S -=T..-=U ...-=V .--=W -..-=X-.--=Y --..=Z# 数字0----- 1.---- 2..--- 3...-- 4....-5..... 6-.... 7--... 8---.. 9----.# CTF变种:点划替换为0/1、·/—等符号
除了摩斯密码,CTF中还可能出现旗语(Semaphore Flag)、二进制时钟编码(Binary Clock)、波利比乌斯方阵(Polybius Square)等信号编码题型。这些编码的共同特点是:它们通常附带图案或图片说明,只要理解了编码规则,解码过程本身不难。建议平时多浏览www.dcode.fr和CyberChef,熟悉各种编码的识别特征。
四、工具推荐与实战技巧
- CyberChef——CTFer的瑞士军刀
CyberChef(gchq.github.io/CyberChef)是英国GCHQ开源的在线数据处理工具,是CTF中最推荐使用的编码解码工具。它支持拖拽式操作流程(Recipe),可以像搭积木一样组合多种编码解码操作。对CTF编码题来说,直接从Magic(自动检测)开始——CyberChef会尝试自动识别和还原编码。
# CyberChef常用1.From Base64 2.From Hex 3.URL Decode4.From Base32 5.Atbash Cipher6.Caesar Brute Force 7.Vigenère Decode8.Morse Code 9.Magic(自动检测,首选)# 多层编码直接用Magic一键逐层解码
- 在线密码工具
| 工具 | 地址 | 用途 | | — | — | — | | CyberChef | gchq.github.io/CyberChef | 全能编码解码+自动检测 | | dcode.fr | www.dcode.fr | 全种类密码解决方案 | | Boxentriq | www.boxentriq.com/code-breaking | 密码分析工具集 | | Cryptii | cryptii.com | 可视化编码转换 | | Rumkin Tools | rumkin.com/tools/cipher | 古典密码集合 | | Morse Code World | morsecode.world | 摩斯密码在线转换 |
效率技巧
做题第一原则:不要手动解码!看到疑似编码的字符串,先扔进CyberChef的Magic自动检测。很多时候一行Base64后面叠了Hex再叠URL编码,手工逐层解又慢又容易错。另外,遇到多层编码时可以观察编码的特征——Base64的=号、Hex的全数字+字母a-f、URL编码的%号都是很好的识别标记。
五、综合实战:拆解一道编码类CTF真题
下面我们用一道典型的CTF编码题来串联以上知识点:
题目给出一段文本:
「JTJGJTBBJTJGJTIwJTVCJTVCJTVCJTBB」
先URL解码一次得到Base64字符串,再Base64解码得到一段数字,Hex解码后得到一串Base32,Base32解码后得到培根密码的AB序列,最后培根解码得到Flag。这种嵌套编码是CTF中被反复使用的套路。
# 多层编码解密流程密文:JTJGJTBBJTJGJTIw...1.URL Decode → ZwoKLy8...(Base64)2.Base64 Decode → 666C6167...(Hex)3.Hex Decode → MFQXMIDQ...(Base32)4.Base32 Decode → AABBABA...(Bacon)5.Bacon Decode → flag{c0d1ng_15_fun!}# 快捷方案:CyberChef Magic一键自动逐层解码
避坑提醒
很多CTF新手在做编码题时容易陷入“手动逐层试”的误区。正确做法:看到一串可疑文本先看特征判断编码类型,然后用CyberChef批量处理。如果Magic没有自动检测出来,试试手动组合不同的操作流程。效率最高的做法是写一个Python脚本,用自动检测库如base65536或自己写递归解码函数。
编码与古典密码是CTF中最容易拿分的部分——不需要深入理解复杂的算法原理,只要熟悉常见编码的特征和在线工具的使用,就能解决大部分题目。但也不要轻视:编码类题目往往是CTF比赛中综合题的开胃菜,快速准确地完成编码解码可以为后面的难题争取宝贵时间。建议在CTF练习平台(BUUCTF、攻防世界)上找10道编码类题目刷一遍,做到看到特征就能立刻反应出解码方式的程度。
觉得有用?点个在看支持一下
值班员说 编码解码看似简单,但它是CTF比赛的入场券。Base64、Hex、URL编码这些基础技能不扎实,后面的RSA、Pwn等难题根本走不通。建议每位CTF新手花一周时间专门刷编码题,把CyberChef用熟练,做到看到字符串就能条件反射地判断编码类型。基础不牢,地动山摇——这句话在CTF里同样适用。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全值班室 安全值班室 安全值班室《CTF入门|第8期 Misc入门:编码与古典密码》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论