0x00 题目介绍
Hex 是 CryptoHack 密码学板块最基础的入门题型,分值 5 分,专门用来讲解十六进制编码的核心原理与 Python 解密方法,适合 CTF 零基础新手入门。
题目信息
- 平台:CryptoHack
- 题目:Hex
- 考点:十六进制 (Hex) 编码、Python bytes.fromhex 转换
- 密文:
63727970746f7b596f755f77696c6c5f62655f776f726b696e67776974685f6865785f6c6f74737d题意简述
原始二进制字节包含大量无法正常复制、展示的不可见字符,因此行业普遍使用十六进制将字节编码为纯字母数字字符串。 编码流程:字符 → ASCII 十进制 → 两位十六进制 → 拼接长字符串。 我们的任务就是将给出的 Hex 字符串逆向解码,还原可读明文 Flag。 题目贴心给出 Python 核心转换接口:
- 解密:
bytes.fromhex() - 加密:字节对象
.hex()
0x01 十六进制基础概念
- 十六进制字符集:0~9,a~f(大小写均可);
- 规则:2 位十六进制数字对应 1 个 8bit 字节;
- 用途:可视化存储、传输二进制原始数据,是逆向、密码题最常见编码格式。
0x02 三种解密解题方案
方案 1:Python 脚本解密(推荐,适合学习)
# 题目给出的hex密文 cipher = "63727970746f7b596f755f77696c6c5f62655f776f726b696e67776974685f6865785f6c6f74737d" # 十六进制转字节,再解码为utf8字符串 flag = bytes.fromhex(cipher).decode("utf-8") print("[+] Flag:", flag)运行输出:
[+] Flag: crypto{You_will_be_working_with_hex_lots}方案 2:CyberChef 在线可视化解密
无需写代码,适合快速做题:
- 打开 CyberChef 官网;
- 搜索添加
From Hex操作模块; - 将密文粘贴至输入框,右侧即时输出明文。
方案 3:通用在线 Hex 解码工具
搜索引擎搜索「十六进制转 ASCII」,粘贴密文一键解密,适合临时快速解题。
0x03 函数底层原理讲解
bytes.fromhex(s)自动将字符串每两位划分为一组,转为二进制字节流,支持带空格 / 无空格两种 Hex 格式。b"text".hex()反向编码函数,将任意字节转为十六进制字符串,与本题解密操作互为逆运算。 示例验证:
输出结果和题目给出密文完全相同,证明转换可逆。flag = "crypto{You_will_be_working_with_hex_lots}" print(flag.encode().hex())
0x04 新手高频踩坑汇总
- 密文复制不全,Hex 字符串长度为奇数,直接抛出转换异常;
- 混淆编码和解码 API,误用
.hex()去解密密文; - 忘记调用
.decode(),输出带b''前缀的字节对象; - 密文混入换行、空格、中文等非法字符,转换失败。
0x05 学习延伸
- 实操反向编码:将得到的 Flag 编码回 Hex,和题目密文比对;
- 手动转换练习:截取前两位
63,换算十进制 99,对应 ASCII 字符c,直观理解转换逻辑; - 后续关联题目:CryptoHack Encoding Challenge 综合闯关题,大量复用 Hex 解码逻辑。
0x07 结语
Hex 是 CTF 密码、逆向、流量分析的基础编码格式,吃透本题转换逻辑,能为后续所有编码类题目打好底层基础。本题核心就是掌握bytes.fromhex()这一 Python 内置转换方法。