目录
一、ASCII 码(基础字符集)
1. 定义
2. 编码规则
3. 特点 & 抓包场景
示例
二、Unicode(统一字符集 / 字符编号)
1. 定义
2. 核心概念:码点(Code Point)
3. 范围
4. 关键误区(抓包必懂)
三、UTF-8(互联网主流编码,抓包 90% 都是它)
1. 定义
2. 核心特点
3. 编码规则(重点,解密 / 字节分析必备)
4. 实操示例(中文转 UTF-8 字节)
5. 抓包 & 开发场景
四、Base64(抓包 / 解密 / 逆向高频编码)
1. 定义
2. 核心原理
规则
字节对应关系
3. 补位规则(抓包看末尾 = 必懂)
4. 标准码表(64 个字符)
5. 关键区分:编码 ≠ 加密
6. 实战场景(抓包 / 解密)
7. 极简代码示例(常用语言)
Python
JavaScript(前端抓包调试)
五、四大编码横向对比(抓包快速区分)
六、抓包排错 & 解密经验总结
结合原理、编码规则、区别、抓包场景用法、加解密实操讲解,适合网络抓包、接口分析、字符串逆向解密使用。
一、ASCII 码(基础字符集)
1. 定义
American Standard Code for Information Interchange,美国信息交换标准代码,最早的单字节字符编码。
- 仅表示英文字母、数字、英文符号、控制字符,不支持中文、日文等非英文字符。
2. 编码规则
- 占用:1 字节(8 bit),实际只用低 7 位,最高位固定为
0 - 取值范围:
0 ~ 127(十进制),共 128 个字符- 0~31、127:控制字符(回车、换行、退格、响铃等,抓包里常看到
\r \n) - 32:空格
- 48~57:数字
0-9 - 65~90:大写字母
A-Z - 97~122:小写字母
a-z - 其余:英文标点、符号
- 0~31、127:控制字符(回车、换行、退格、响铃等,抓包里常看到
3. 特点 & 抓包场景
- 纯英文接口、老式协议、串口通信、HTTP 基础头域默认使用 ASCII。
- 缺陷:字节上限 127,完全无法表示中文,中文会直接乱码。
- 抓包现象:纯英文请求 / 响应原始字节和 ASCII 一一对应。
示例
字符A→ 十进制65→ 二进制01000001字符0→ 十进制48
二、Unicode(统一字符集 / 字符编号)
1. 定义
ASCII 只能表示英文,全球语言无法统一,因此诞生Unicode(万国码)。核心定位:给全世界所有字符分配唯一「数字编号(码点)」,不是具体存储编码。 简单理解:
Unicode =字符字典(每个字符对应一个唯一 ID) UTF-8/UTF-16/UTF-32 =把 ID 转成二进制字节的存储方案
2. 核心概念:码点(Code Point)
每个字符对应一个十六进制码点,格式:U+xxxx
- 例:
- 英文字母
A:U+0041 - 中文
中:U+4E2D - 中文
国:U+56FD
- 英文字母
3. 范围
目前 Unicode 覆盖十几万字符:汉字、日文、韩文、表情、特殊符号、古文字等。
4. 关键误区(抓包必懂)
Unicode ≠ UTF-8
- Unicode:只是字符的编号,不规定怎么存成字节。
- UTF-8/UTF-16:是 Unicode 的实现 / 存储编码。
三、UTF-8(互联网主流编码,抓包 90% 都是它)
1. 定义
UTF-8 = Unicode Transformation Format - 8bit目前互联网、HTTP 接口、网页、APP 抓包、JSON、日志的默认编码,兼容性最强。
2. 核心特点
- 变长编码:1~4 个字节动态存储,按需分配长度
- 完全兼容 ASCII:ASCII 字符在 UTF-8 中仍占 1 字节,老式系统无缝兼容
- 无字节序问题(不需要 BOM 头),网络传输首选
3. 编码规则(重点,解密 / 字节分析必备)
UTF-8 通过高位标识区分当前字符占用几个字节,规则固定:
1 字节字符(ASCII 区)二进制开头:
0xxxxxxx范围:U+0000 ~ U+007F(所有英文、数字、符号) 👉 和 ASCII 完全一致2 字节字符(常用拉丁文、少量符号)首字节:
110xxxxx后续字节:10xxxxxx3 字节字符(绝大多数中文、日文、韩文、全角符号)首字节:
1110xxxx后续字节:10xxxxxx中文全部落在 3 字节区间,抓包看到中文一定是 3 字节一组。4 字节字符(emoji、生僻古汉字、特殊符号)首字节:
11110xxx后续字节:10xxxxxx
4. 实操示例(中文转 UTF-8 字节)
字符:中
- Unicode 码点:
U+4E2D - 转为二进制:
0100 1110 0010 1101 - 套 3 字节 UTF-8 模板
1110xxxx 10xxxxxx 10xxxxxx - 填充后得到 3 个字节,抓包里看到的原始字节就是它。
5. 抓包 & 开发场景
- HTTP 响应头常见:
Content-Type: text/html; charset=utf-8 - JSON、POST 表单、接口参数、URL 编码底层都是 UTF-8
- 中文乱码 99% 原因:编码不匹配(服务端 GBK,客户端 UTF-8)
- URL 编码(% XX 形式):基于 UTF-8 字节再做百分号编码
四、Base64(抓包 / 解密 / 逆向高频编码)
1. 定义
Base64 是二进制 → 可打印文本的编码方式,不是加密算法(可逆、无密钥)。 作用:把二进制数据、特殊字节、不可见字符转成纯字母、数字、+、/,方便在 HTTP、参数、JSON、Cookie 中传输。
抓包常见场景:密码、图片二进制、Token、加密后的密文、文件流、接口暗文大量使用 Base64。
2. 核心原理
规则
- 把原始数据每 3 个字节(24 bit)划为一组
- 24 bit 重新拆分为4 个 6 bit小段
- 每个 6 bit 对应 Base64 标准码表中的 1 个可打印字符
- 不足 3 字节时,末尾用
=补位(填充符)
字节对应关系
- 原始:3 字节 = 24 bit
- 编码后:4 字符
- 体积变化:Base64 编码后体积比原数据大 1/3(网络传输会增重)
3. 补位规则(抓包看末尾=必懂)
Base64 末尾的=是填充符,只出现在数据长度不能被 3 整除时:
- 剩余1 字节:补2 个
= - 剩余2 字节:补1 个
= - 刚好 3 的倍数:无
=
例:
YWJj→ 无等号,原始 3 字节YWE=→ 1 个等号,原始 2 字节YQ==→ 2 个等号,原始 1 字节
4. 标准码表(64 个字符)
A-Z、a-z、0-9、+、/,共 64 个字符。
变种:URL Safe Base64(接口 / URL 常用) 把
+→-,/→_,去掉末尾=,避免 URL 转义冲突。
5. 关键区分:编码 ≠ 加密
- Base64公开码表、完全可逆,任何人都能解码
- 逆向 / 抓包中:看到 Base64 不等于加密,只是格式转换
- 常见套路:先 AES/DES 加密 → 再 Base64 输出(这才是真正加密)
6. 实战场景(抓包 / 解密)
- Cookie、Token、Authorization 头大量 Base64
- 接口参数、隐藏密文、上传图片二进制转文本
- 逆向分析:拿到密文先判断是否 Base64(字符集只有字母数字
+/_=) - 工具:Burp、Fiddler、在线解码、Python/JS 原生函数均可一键解编
7. 极简代码示例(常用语言)
Python
import base64 # 编码 字符串 → Base64 s = "测试123" b64_enc = base64.b64encode(s.encode("utf-8")).decode() # 解码 Base64 → 字符串 b64_dec = base64.b64decode(b64_enc).decode("utf-8")JavaScript(前端抓包调试)
// 编码 let enc = btoa(unescape(encodeURIComponent("测试123"))); // 解码 let dec = decodeURIComponent(escape(atob(enc)));五、四大编码横向对比(抓包快速区分)
| 编码 | 本质 | 字节长度 | 支持中文 | 网络用途 |
|---|---|---|---|---|
| ASCII | 英文字符集 | 1 字节 | ❌ 不支持 | 老式协议、HTTP 基础头 |
| Unicode | 全局字符编号(码点) | 无固定 | ✅ 支持 | 底层字符定义,不直接传输 |
| UTF-8 | Unicode 变长存储编码 | 1~4 字节 | ✅ 支持 | 全网主流、接口、网页、JSON |
| Base64 | 二进制转文本编码 | 膨胀 1/3 | 间接支持 | 二进制传输、参数、Token、密文 |
六、抓包排错 & 解密经验总结
- 看到中文乱码优先检查:是否 UTF-8、GBK、GB2312 编码不匹配。
- 接口参数是一堆字母数字 + +/99% 是Base64,直接解码看原始内容。
- URL 里 % xx% xx% xx是URL 编码,底层基于 UTF-8 字节生成。
- 区分 Unicode / UTF-8抓包原始字节不会直接出现 Unicode 码点,网络传输一律用 UTF-8。
- Base64 带 - _ 无等号属于URL 安全版 Base64,解码前先还原
_-再解码。