一、编码与解码核心概念
1. 编码(Encode)
定义:将原始可读信息(文字、数字、二进制数据)按照一套公开固定规则,转换为另一套字符 / 二进制串的过程。 三大作用:
转换流程:原始明文 → 规则映射 → 编码密文 示例:
- 明文flag ASCII 十进制编码 → 102 108 97 103
- 明文flag Hex 十六进制编码 → 666c6167
- 明文flag Base64 编码 → ZmxhZw==
2. 解码(Decode)
编码的可逆逆操作:使用同一套映射规则,将编码后的字符串还原为原始可读明文。 转换流程:编码密文 → 反向规则映射 → 原始明文 示例:ZmxhZw== Base64 解码得到明文flag
3. 编码与加密
| 标准编码 | 无密钥、规则全球公开、无损双向可逆 | MISC 杂项 |
| 加密算法 (AES/RSA 等) | 必须依赖密钥,无密钥无法还原数据 | Crypto 密码学 |
简单举例:Base64 属于编码,任意在线工具均可直接解码;AES 属于加密,缺少密钥无法解密。
二、底层基础:进制原理与 CTF 常用进制
1. 进制通用定义
进制是一套数字计数规则,三大核心要素:
我们日常使用十进制(基数 10),单个数字只能使用 0-9,满十向高位进一,例如9+1=10。
2. CTF / 计算机四大核心进制
(1)二进制 Binary(基数 2)
- 可用数字:仅0、1
- 进位规则:逢 2 进 1
- 核心地位:计算机底层唯一数据格式,图片、程序、LSB 隐写、流量原始数据全部以二进制存储
- 题型场景:隐写提取 01 字符串、摩尔斯电码转二进制、文件原始数据流分析
(2)八进制 Octal(基数 8)
- 可用数字:0~7,不存在 8、9
- 进位规则:逢 8 进 1
- 换算关系:3 位二进制 = 1 位八进制
- 出现场景:Linux 文件权限、字符串转义字符\\0xx,比赛低频考点
(3)十进制 Decimal(基数 10)
- 人类通用计数方式,数字范围0~9
- CTF 用途:ASCII 十进制编码,空格分隔数字串,如102 108 97 103解码为flag
(4)十六进制 Hex(基数 16)
- 基数 16,逢 16 进 1;数字不足使用字母补充映射: 0 1 2 3 4 5 6 7 8 9 a(10) b(11) c(12) d(13) e(14) f(15)
- 换算关系:4 位二进制 = 1 位十六进制
- 高频场景:文件魔数、十六进制编辑器、Hex 编码、Base16、抓包原始数据、EXIF 元数据
3. 进制快速识别判断(做题技巧)
三、底层字符基础编码(依托进制实现)
1. ASCII 标准字符编码
原理
单字节数值范围0~127,每个数字唯一映射英文字母、数字、符号、控制字符; 关键映射:大写 A=65 (0x41)、小写 a=97 (0x61)、大括号{=123。
密文识别特征
一串十进制数字,数字之间空格分隔,一组数字对应一个字符。 示例:102 108 97 103 → flag
分类
标准 ASCII (0~127):可打印字符 + 控制字符


-
扩展 ASCII (128~255):各国特殊符号,CTF 少见
2. Hex 十六进制编码
规则
1 字节数据固定转为 2 位十六进制字符,字符集0-9,a-f/A-F
识别特征
- 字符串仅包含数字 0-9、字母 a-f/A-F;
- 整体字符串长度一定是偶数;
- 做题优先级:纯十六进制串优先解 Hex,不要误判为 Base64
示例
密文:666c61677b746573747d 解码结果:flag{test}
3. Unicode/UTF 系列扩展编码(中文、特殊符号通用)
用于存储中文、Emoji、多国语言字符,CTF 常见 4 种表现形式
- JS 标准转义 \\uXXXX
\\u0066\\u006C\\u0061\\u0067 → flag
- HTML 十进制实体 &#数字;
flag → flag
- HTML 十六进制实体 &#x十六进制;
flag → flag
- CSS 十六进制转义 \\00XX
4. Binary 二进制编码
- 识别特征:仅由 0、1 组成,常规 8 位分为一组对应 1 字节
- 题型:LSB 图片隐写导出大量 01 串、音频摩斯密码转换二进制后二次解码
四、Base 家族扩展编码(MISC 核心高频考点)
Base 编码通用原理
将二进制数据按固定 bit 位数分组,每组映射一张自定义字符表,末尾使用=填充补齐位数。
1. 标准基础 Base 对照表
| Base16(Hex) | 4bit | 0-9,a-f | 仅数字 + 小写 a-f,长度偶数 |
| Base32 | 5bit | A-Z,2-7 | 无小写、无数字 0/1/8/9,末尾等号填充 |
| Base64 | 6bit | A-Za-z0-9+/ | 大小写数字 ++/,末尾=填充 |
| Base64url | 6bit | A-Za-z0-9-_ | 把+/替换为-_,适配 URL 传输 |
2. 冷门扩展 Base(进阶难题考点)
3. 魔改自定义 Base
出题人修改标准 Base 的字符表顺序、删减字符,现象:
- 字符串长度、填充符符合 Base 规则,但标准在线工具解码乱码报错;
- 通用解法:Python 编写自定义字符表解码脚本,匹配flag{前缀爆破正确字符映射表。
五、Web / 邮件传输专用扩展编码
1. URL 百分号编码(URLEncode)
规则
非字母、数字的特殊符号转换为%XX格式,XX 为 UTF-8 十六进制值
识别特征
字符串大量包含%百分号
进阶考点:双重 URL 编码
符号经过两次编码,需要逐层解码才能还原原始字符,常用来绕过 Web 过滤
2. Quoted-Printable 邮件编码
识别特征:大量=搭配两位十六进制,每行末尾存在=换行标记,多出现在邮件源码、注释隐写。
3. UUencode / XXencode(老式二进制传输编码)
- UUencode:文件开头固定begin、结尾end,字符区间为空格~波浪号,早期邮件二进制传输格式;
(5&5S=$`Q,C,`
- XXencode:仅包含大写字母、数字,无特殊符号,老旧流量包题型偶尔出现;
6J4JnR2+lAXA+
六、JS 前端脚本混淆编码(本质字符编码转换)
无密钥可逆,用于混淆 JS 源码,MISC/Web 综合题常见,全部由特殊符号构成密文:
1. JSFuck
- 识别特征:密文仅包含 6 个字符 [ ] ( ) ! +,无任何数字字母;
- 原理:利用数组、算术运算拼接 ASCII 字符,在线工具一键解码还原 JS 代码 / 明文。
2. aaencode
特征:大量颜文字、△▽类表情符号,完整 JS 代码转换为表情字符串。
3. jjencode
特征:仅$ S + _少量符号,无表情,纯符号混淆 JS 源码。
七、国内特色网红魔改趣味编码
全部为国内出题人自定义字符映射,无密钥可逆,属于扩展编码范畴:
八、ROT 旋转字符偏移编码(多层嵌套高频)
仅字符循环偏移,自身可逆,无密钥,常多层叠加出现:
九、莫尔斯电码(MISC 音频 / 图片点阵高频)
摩尔斯依靠点、横、间隔映射字符,音频频谱、图片点阵、流量负载常出现,完整对照表:
A .- N -. . .-.-.- + .-.-. 1 .—-
B -… O — , –..– _ ..–.- 2 ..—
C -.-. P .–. : —… $ …-..- 3 …–
D -.. Q –.- " .-..-. & .-… 4 ….-
E . R .-. ' .—-. / -..-. 5 …..
F ..-. S … ! -.-.– 6 -….
G –. T – ? ..–.. 7 –…
H …. U ..- @ .–.-. 8 —..
I .. V …- – -….- 9 —-.
J .— W .– ; -.-.-. 0 —–
K -.- X -..- ( -.–.
L .-.. Y -.– ) -.–.-
M — Z –.. = -…-
十、CTF 编码快速识别速查表
十一、多层编码标准解题流程
十二、工具
GitHub – gchq/CyberChef: The Cyber Swiss Army Knife – a web app for encryption, encoding, compression and data analysis · GitHub
GitHub – bee-san/Ciphey: ⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes ⚡ · GitHub
随波逐流软件信息安全 – CTF编码工具
Linux 命令行原生工具
特别感谢
探姬_Official
网硕互联帮助中心





评论前必须登录!
注册