引言
hello! 欢迎来到咪猫魔法世界 🐾
在 CTF Crypto 里,编码是“字节与人类语言之间的通用咒语”:所有明文、密文最终都会以字节(bytes)形式存储与传输。理解编码的标准化规则,就能更快拆解题目外层的数据伪装。 而 CyberChef 是咪猫的炼金台:拖拽模块、实时出结果,非常适合用来验证你对“这层到底是不是编码”的判断。
一、编码 vs 加密
编码和加密经常被新手混淆,但它们的目标完全不同。编码遵循公开的标准规则,解决的是数据表示与传输问题,所以本身不提供保密性;加密依赖密钥进行变换,核心是隐藏内容,没有密钥就难以合法还原。
| 类型 | 核心特征 | 关键区别 |
|---|---|---|
| 编码(Encoding) | 公开标准化规则,解决表示/传输 | 无保密性,按规则可还原 |
| 加密(Encryption) | 依赖密钥的变换,隐藏内容 | 无密钥难以还原 |
咪猫口诀:编码是能读懂,加密是读不懂。
小提示:CTF 常把“编码 + 加密”叠加出题,一般顺序是先解编码,再解加密。
二、CTF 最核心的三类编码
2.1 字符编码:ASCII / UTF-8 / GBK
字符编码解决的是字符与字节之间的标准化映射,这是所有编码题的地基。ASCII 覆盖英文、数字和基础符号,是很多编码的基础;UTF-8 是互联网主流标准(RFC 3629),兼容 ASCII,多语言场景最常见;GBK 则更常出现在 Windows 环境中,尤其是中文相关的数据。
在 CTF 里我们真正需要记住的不是“背表”,而是一个判断:同一段字节用错编码会乱码。例如 GBK 的中文如果按 UTF-8 去解释,就可能出现乱码。遇到这种情况,CyberChef 里用 Decode text 切换编码选项,往往就能直接还原。
| 编码 | 权威标准 | 字节占用 | CTF 常见关注点 |
|---|---|---|---|
| ASCII | ANSI X3.4-1968 | 1 字节 | 基础文本、协议字段 |
| UTF-8 | RFC 3629 | 1–4 字节 | 主流;中文通常 3 字节/字 |
| GBK | GB 18030 相关扩展 | 1–2 字节 | Windows 常见;中文通常 2 字节/字 |
2.2 Base 家族:Base64 / Base32 / Base85
Base 类编码的定位很明确:把二进制数据变成可打印字符,方便在文本通道传输。其中 Base64 与 Base32 可参考 RFC 4648,标准化程度更高。CTF 场景里,Base64 是绝对高频:你会经常遇到“看起来像一串字母数字、末尾带 =”的字符串,它很可能就是 Base64。
Base64 的核心规则可以记成一句话:每 3 字节拆成 4 个 6 位块映射成字符,不足用 = 填充(最多 2 个)。例如明文 AB 的 Base64 结果是 QUI=。Base32 的字符集更“干净”,常见为大写字母与 2-7;Base85 的字符范围更广,但不同实现(如 Ascii85、Z85)字符表有差异,遇到时需要在工具里切换模块验证。
| 类型 | 字符集特征 | CTF 实战要点 |
|---|---|---|
| Base64 | A-Za-z0-9+/,尾部可能有 = |
最高频;可能是 URL 安全变体;= 最多 2 个 |
| Base32 | 以 A-Z 与 2-7 为主 |
次高频;字符集更规整 |
| Base85 | 可打印 ASCII 范围更广 | 低频;注意 Ascii85、Z85 差异 |
参考资料:Base家族编码标准全解析
2.3 Hex(十六进制)
Hex 可以理解为“字节的可视化外衣”:把 1 字节拆成两个半字节,分别用 0-9 和 A-F(或 a-f)表示。所以它最显眼的特征是:字符只会出现在 0-9A-Fa-f,并且长度通常为偶数。常见示例是 41 对应 A,48656C6C6F 对应 Hello。CTF 中很多题会把真实数据先 Hex 一层再套别的编码,所以看到这种“很规整的十六进制串”,通常值得先解一层看看。
三、CyberChef 实战配方(后续会补充截图)
CyberChef 官方地址:https://gchq.github.io/CyberChef/
CyberChef 用起来最舒服的地方在于:你不需要先写脚本,只要把模块拖上去就能立刻看到输出。实际做题时,建议大家先做一点“数据清洗”,比如去掉空格换行、去掉 0x 前缀、删掉逗号等干扰字符。常用的就是 Remove whitespace 和 Find / Replace。
最常用的三类操作其实非常固定。遇到凯撒类移位,直接用 ROT13 试一下,不行再换 ROT 调偏移;遇到 Base64,就用 From Base64 解一层,如果输出还是 Base64 的样子就继续叠一层,直到出现可读文本为止;遇到组合编码,记住一个原则:怎么加就怎么倒着拆。例如加密顺序是 Hex → Base85 → Base85,那解密顺序就是 From Base85 → From Base85 → From Hex。如果题目不提示顺序,就从“最像文本外壳”的那层开始剥离,每剥一层再观察新的外观继续判断。
四、CTF 编码题的常见坑
编码题最容易掉进去的坑其实不多,但很致命。第一是顺序:组合编码基本都要倒序解码;第二是 Base64 的填充:= 最多两个,缺失时需要补齐并让长度对齐到 4 的倍数;第三是 Base85 的实现差异:Ascii85 与 Z85 字符表不同,必须切换模块验证。
五、总结
先看外观(像 Base64、像 Hex、像乱码)→ CyberChef 清洗并试错 → 按层剥离、倒序还原。
编码的本质是“数据的标准化翻译”。把这三类核心编码吃透,你就能稳稳拿下 CTF Crypto 里大多数基础编码题啦 🐾
