跳转至

曼彻斯特编码

什么是曼彻斯特编码?

曼彻斯特编码(Manchester Encoding)是一种线路编码方式,用电平跳变来表示二进制数据。它常用于通信和硬件相关题目,也可能出现在波形、逻辑分析、无线电或图片条纹题中。

它的核心特点是:每一个 bit 周期中间一定会发生一次跳变,这个跳变方向表示 0 或 1。

两种常见约定

曼彻斯特编码存在两种常见定义,做题时要注意题目或工具采用哪一种。

IEEE 802.3 约定

原始 bit 中间跳变 常见二进制表示
0 高到低 10
1 低到高 01

Thomas 约定

原始 bit 中间跳变 常见二进制表示
0 低到高 01
1 高到低 10

如果解码结果不对,可以尝试把规则反过来。

编码原理

把每个原始 bit 扩展为两个半 bit:

原始数据:  0 1 1 0
IEEE编码: 10 01 01 10

所以:

0110 -> 10010110

曼彻斯特编码后的长度通常是原始二进制长度的 2 倍。

解码示例

密文:

10010110

按 IEEE 802.3 约定每 2 位切分:

编码 原始 bit
10 0
01 1
01 1
10 0

得到:

0110

如果按 Thomas 约定,结果会变成:

1001

非法组合

标准曼彻斯特编码中,每组两位应该是 01 或 10。如果出现 00 或 11,可能有以下情况:

  • 起始位置切分错了。
  • 采样频率或图像读取方式不对。
  • 使用的是差分曼彻斯特编码。
  • 数据被反相或混入了同步头。

CTF 识别要点

  • 二进制串长度通常为偶数。
  • 每两位经常只出现 01 和 10。
  • 题目可能出现 Manchester、波形、电平、signal、logic analyzer 等提示。
  • 解码后可能还需要按 8 bit 转 ASCII、Hex 或继续 Base 编码。