云计算百科
云计算领域专业知识百科平台

CTF笔记2-编码基础

一、编码与解码核心概念

1. 编码(Encode)

定义:将原始可读信息(文字、数字、二进制数据)按照一套公开固定规则,转换为另一套字符 / 二进制串的过程。 三大作用:

  • 网络传输兼容:二进制、特殊符号无法直接传输,编码为通用可见字符;
  • 统一多设备、多协议数据格式;
  • CTF 出题用途:隐藏 flag 线索,作为多层解题中间步骤。
  • 转换流程:原始明文 → 规则映射 → 编码密文 示例:

    • 明文flag ASCII 十进制编码 → 102 108 97 103
    • 明文flag Hex 十六进制编码 → 666c6167
    • 明文flag Base64 编码 → ZmxhZw==

    2. 解码(Decode)

    编码的可逆逆操作:使用同一套映射规则,将编码后的字符串还原为原始可读明文。 转换流程:编码密文 → 反向规则映射 → 原始明文 示例:ZmxhZw== Base64 解码得到明文flag

    3. 编码与加密

    类型核心特点归属 CTF 题型
    标准编码 无密钥、规则全球公开、无损双向可逆 MISC 杂项
    加密算法 (AES/RSA 等) 必须依赖密钥,无密钥无法还原数据 Crypto 密码学

    简单举例:Base64 属于编码,任意在线工具均可直接解码;AES 属于加密,缺少密钥无法解密。

    二、底层基础:进制原理与 CTF 常用进制

    1. 进制通用定义

    进制是一套数字计数规则,三大核心要素:

  • 基数:几进制,基数数字就是几;
  • 进位规则:逢基数进 1;
  • 单数字取值范围:0 ~ 基数-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. 进制快速识别判断(做题技巧)

  • 字符串只包含 0、1 → 二进制
  • 仅 0~9、a~f,总长度为偶数 → 十六进制 Hex
  • 纯数字、空格两两分隔 → ASCII 十进制编码
  • 仅 0~7,无 8、9 → 八进制
  • 三、底层字符基础编码(依托进制实现)

    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 对照表

    编码名称分组 bit 数标准字符集快速识别特征
    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(进阶难题考点)

  • Base85 / Ascii85 压缩二进制数据,字符包含u,z,!,常见固件、PDF 隐写题目;
  • Base91 字符覆盖大小写、各类标点符号,无固定填充符,密文混杂特殊符号;
  • Base100(Emoji Base) 密文全部由表情符号构成,每个 Emoji 代表 1 字节,视觉辨识度极高;
  • Base65536 超大字符集,使用生僻汉字、特殊符号作为编码载体,CTF 高难度隐写专用。
  • 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 源码。

    七、国内特色网红魔改趣味编码

    全部为国内出题人自定义字符映射,无密钥可逆,属于扩展编码范畴:

  • 与佛论禅(佛曰编码) 密文全部由佛、禅、观、音、菩、提等佛教汉字组成,固定一对一映射 ASCII 字符;
  • 阴阳怪气编码(yygq) 仅使用「阴、阳、怪、气」四个字分组映射二进制;
  • 社会主义核心价值观编码 24 个固定词汇分段编码,长汉字串,先转二进制再二次解码;
  • 小众网络词编码:尊嘟假嘟、兽语编码,仅出现在趣味脑洞题。
  • 八、ROT 旋转字符偏移编码(多层嵌套高频)

    仅字符循环偏移,自身可逆,无密钥,常多层叠加出现:

  • ROT5:仅数字 0-9 循环偏移 5 位,只处理数字;
  • ROT13:仅大小写字母偏移 13 位,加密和解密操作完全相同;
  • ROT18:ROT5+ROT13 组合,同时处理数字 + 字母;
  • ROT47:覆盖全部可打印 ASCII 字符(33~126),数字、字母、符号全部偏移。
  • 九、莫尔斯电码(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 编码快速识别速查表

  • 纯 0/1 字符串 → 二进制编码
  • 仅 0-9a-f、长度偶数 → Hex 十六进制编码
  • 大量百分号% → URL 编码,检查是否双重编码
  • 大小写数字 ++/= → Base64;-_= → Base64url;纯大写 + 数字 2-7 → Base32
  • 仅[]()!+六种符号 → JSFuck 混淆编码
  • 通篇佛教汉字(佛、禅、菩、提)→ 与佛论禅
  • \\uXXXX / &#x / &#数字 → Unicode/HTML 实体编码
  • 大量表情符号 → Base100
  • 行尾带=、=后接两位数字 → Quoted-Printable 邮件编码
  • 只有「阴、阳、怪、气」四字 → yygq 阴阳怪气编码
  • 空格分隔纯数字串 → ASCII 十进制编码
  • 点、横、空格组合字符串 → 摩尔斯电码
  • 十一、多层编码标准解题流程

  • 提取密文字符串:从图片 strings、流量包、隐写导出文本、附件中获取编码串;
  • 对照速查表匹配编码特征,遵循优先级:底层进制编码 > URL 编码 > Base 系列 > 趣味魔改编码 > ROT / 摩尔斯;
  • 单次解码后观察输出内容:若输出依旧是乱码 / 另一组编码字符串,循环递归解码;
  • 出现flag{/CTF{}标准前缀,停止解码,输出答案;
  • 标准工具解码报错:判定为魔改自定义编码,手写 Python 映射脚本解码。
  • 十二、工具

    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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » CTF笔记2-编码基础
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!