十六进制编码是什么
十六进制编码把每个字节表示成两个十六进制字符,是最常见的二进制可视化方式:密钥、散列、随机数与抓包内容默认都以 hex 展示。它的优点是字符集固定、与字节一一对应、不受显示环境影响;缺点是体积正好翻倍,而且人眼几乎无法直接读出内容。解析时的关键约束很简单:长度必须是偶数,且只能出现十六进制字符。
基本信息
| 换算 | 1 字节 = 2 个 hex 字符,32 字节密钥等于 64 个字符 |
|---|---|
| 大小写 | 解析通常不敏感,展示与存储建议统一小写 |
| 常见工具 | openssl 的 -hex 选项、xxd -p、十六进制编辑器 |
| 长度校验 | 奇数长度即非法,解析前先校验 |
| 常见场景 | 证书指纹、散列值、AES 密钥、抓包内容 |
典型使用场景
- 校验散列与指纹:比对 SHA-256 摘要或证书指纹时用 hex 逐字符对照
- 生成随机密钥:openssl rand -hex 得到便于复制粘贴的密钥文本
- 调试二进制协议:抓包内容以 hex 展示,逐字节分析结构
- 代码中表示常量密钥:配置里以 hex 字符串保存,运行时再解码
- 排查编码错误:先确认是 hex 还是 base64,避免解码后长度不符
常见操作
常见操作
openssl rand -hex 16 # 输出 32 个字符,即 16 字节
echo -n 'hi' | xxd -p # 输出 6869
echo 6869 | xxd -r -p # 还原为 hi
# 在脚本里做合法性校验,避免把奇数长度字符串丢给解码器
python -c "import binascii; binascii.unhexlify('6869')"长度直觉对照
| 字节数 | hex 字符数 | 常见对应 |
|---|---|---|
| 16 | 32 | MD5 摘要、AES-128 密钥 |
| 20 | 40 | SHA-1 摘要 |
| 32 | 64 | SHA-256 摘要、AES-256 密钥 |
| 48 | 96 | SHA-384 摘要 |
看到 64 个 hex 字符时应先判断它可能是 32 字节,例如 SHA-256 摘要或 AES-256 密钥;长度本身就是类型线索。
hex 与 base64 是两种不同编码:同样 32 字节的数据,hex 给出 64 个字符、base64 约 44 个字符,长度对不上通常说明用错了编码。
大小写虽被解析器容忍,但用于字符串比较时要统一:AB 与 ab 会被判为不同,导致校验莫名其妙地失败。日志里也不要完整打印密钥的 hex 值。