前言
在 CTF 密码学基础题型中,Base64 是仅次于 ASCII 编码的高频考点,常搭配十六进制(Hex)嵌套考察。本题是典型的「十六进制转字节 → Base64 编码」复合题型,全程仅使用 Python 标准库即可完成,非常适合刚入门 CTF 的新手练习进制流转、字节与编码转换逻辑。本文结合完整解题流程、代码拆解、原理拓展,整理成可直接发布的技术博客。
一、题目完整信息
基础信息
- 题目名称:Base64
- 题型:密码学 - 基础编码转换
- 分值:10 分
- 难度:入门级
题目原文描述
Base64 是应用极广的编码方案,它能将二进制数据映射为由 64 个标准 ASCII 字符组成的字符串。单个 Base64 字符存储 6bit 二进制数据,每 4 个 Base64 字符可完整编码 3 个 8bit 字节。
Base64 广泛应用于网页场景,图片等二进制资源可直接嵌入 HTML、CSS 文本中传输。 解题要求:给出一段十六进制字符串,先将十六进制解码为原始字节,再对字节进行 Base64 编码,最终得到 flag。
题目给定 Hex 密文字符串
plaintext
72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf官方 Python 提示
导入标准库base64,使用base64.b64encode()完成编码;必须先把十六进制字符串还原为 bytes 字节流,再执行 Base64 编码。
二、前置核心知识点
1. 十六进制(Hex)与字节转换逻辑
十六进制每 2 个字符对应 1 个原始字节(8bit),Python 中使用bytes.fromhex()可以直接将 Hex 字符串转为原始二进制 bytes 对象,是本题第一步核心操作。 示例:bytes.fromhex("6162")会得到字节b'ab'。
2. Base64 编码底层原理
- 把原始二进制数据按 6bit 为一组重新划分;
- 每组 6bit 映射到预设 64 字符字母表(
A-Z,a-z,0-9,+,/); - 原始字节长度无法被 3 整除时,末尾补充
=填充符; - 作用:二进制数据转纯 ASCII 文本,方便网络传输,Base64 只是编码,不是加密,不存在密钥。
3. Python base64 标准库核心函数
base64.b64encode(data):输入 bytes 字节,输出 Base64 编码后的 bytes;.decode('utf-8'):将编码后的 bytes 转为可读字符串;- 配套反向解码函数:
base64.b64decode()(本题用不到,拓展记忆)。
三、完整解题思路 & 可直接运行 Python 脚本
解题流程梳理
- 接收题目给出的十六进制字符串;
- 使用
bytes.fromhex()将 Hex 字符串还原为原始二进制字节; - 调用
base64.b64encode()对字节流做 Base64 编码; - 将编码结果从 bytes 转为 utf-8 字符串,输出得到 flag。
完整解密代码
python
运行
# 导入Python内置base64标准库,无需额外安装 import base64 # 题目提供的十六进制字符串 hex_str = "72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf" # 步骤1:十六进制字符串 转换为原始字节数据 raw_bytes = bytes.fromhex(hex_str) # 步骤2:对原始字节进行Base64编码,输出bytes类型 b64_result = base64.b64encode(raw_bytes) # 步骤3:将bytes转为可读字符串 flag = b64_result.decode("utf-8") # 打印最终flag print("解密编码得到Flag:", flag)代码逐行拆解说明
import base64:加载 Python 自带 Base64 工具库,CTF 编码题必备;- 定义变量
hex_str存储题目给出的完整十六进制密文; bytes.fromhex(hex_str):核心转换步骤,把文本格式的十六进制转为计算机可处理的二进制字节流,是本题最容易遗漏的前置操作;base64.b64encode(raw_bytes):标准 Base64 编码函数,只接收 bytes 参数,不能直接传入字符串;.decode("utf-8"):编码输出结果是带b''标识的字节,解码为普通字符串方便复制提交;- 打印输出最终 flag。
四、程序运行结果与验证
控制台输出
执行代码后直接输出:
plaintext
解密编码得到Flag: crypto/Base+64+Encoding+is+Web+Safe/分步校验过程
- Hex 转字节:
72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf→ 原始二进制字节; - Base64 编码字节流,生成标准 Base64 文本;
- 文本格式即为平台要求提交的 flag,和题目底部给出的标准答案完全匹配。
五、Base64 题型常见变形拓展
掌握本题流程后,可以应对 CTF 中绝大多数 Base64 复合编码题,常见变形如下:
- 反向题型:Base64 解码再转十六进制流程:
b64decode() → bytes → bytes.hex(); - 多层嵌套编码:Hex→Base64→Base64 二次编码需要循环调用
b64encode()多次处理; - URL 安全 Base64 变体编码字符
+、/替换为-、_,库函数base64.urlsafe_b64encode()处理; - 带填充 / 无填充 Base64部分题目会去掉末尾
=,解码前需要手动补齐填充符。
六、新手学习总结
- 区分「编码」与「加密」:Base64、Hex 都只是数据格式转换,没有加密强度,不能用于数据保密;
- 固定解题模板:Hex ↔ Bytes ↔ Base64 三者互相转换是 CTF 编码题核心套路;
- 避坑重点:
base64.b64encode()仅接收 bytes 类型,字符串必须先转字节再处理,这是新手最常踩的报错点; - 工具记忆:Python 内置
base64、binascii两个库可以覆盖 90% 基础进制转换题型,无需在线工具即可本地解题。