CTF 密码学入门|ASCII 编码转换
📅 2026/7/10 3:00:25
👁️ 阅读次数
📝 编程学习
文章前言
刚接触 CTF 的新手,第一道密码类题目基本都会遇到ASCII 编码转换题型。这类题目没有复杂加密算法,仅考察最基础的计算机字符编码知识与 Python 简单脚本编写,是入门练手、熟悉 CTF 解题流程的绝佳例题。 今天以平台经典入门 5 分 ASCII 题为案例,完整梳理知识点、解题代码、验证过程,附带原理总结,适合作为新手第一篇 CTF 技术博客发布。
一、题目详情
1. 题目基础信息
- 题目名称:ASCII
- 题型:密码学 - 基础编码
- 分值:5 分
- 难度:入门(零基础可解)
2. 原题描述
ASCII 是 7-bit 编码标准,通过 0-127 区间内的整数映射所有基础文本字符。 下方给出一组十进制整数数组,将数组内数字逐个转换为对应 ASCII 字符,拼接后即可得到 flag。
官方提示:Python 内置
chr()函数可将 ASCII 数字转为字符,ord()函数实现反向字符转数字。
3. 加密密文(十进制 ASCII 数组)
plaintext
[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]二、前置基础知识点
1. ASCII 编码核心概念
ASCII 全称美国信息交换标准代码,是计算机最基础的字符编码规则:
- 标准 ASCII 仅占用 7 个比特位,数值范围固定
0 ~ 127; - 每一个十进制数字唯一对应一个字符,包含大小写英文字母、数字、下划线、大括号等 CTF 常用符号;
- CTF 题目中 flag 格式统一为
crypto{xxx},我们可以通过这个格式辅助验证解密结果是否正确。
2. Python 核心转换函数
本题解题核心依赖两个内置函数,无需安装第三方库,原生 Python 即可运行:
chr(number):输入十进制 ASCII 数字,返回对应可见字符(本题解密核心函数) 示例:chr(99)输出字符cord(char):输入单个字符,反向输出对应 ASCII 十进制数字 示例:ord('{')输出数字123
三、完整解题思路与脚本实现
思路分析
题目逻辑非常直白:数组内每一个数字都是明文对应的 ASCII 码值,我们只需要循环遍历列表,逐个使用chr()完成转换,最后把所有字符拼接为完整字符串,就能拿到 flag。
解密 Python 脚本(可直接复制运行)
python
运行
# 题目给出的ASCII十进制数组 ascii_arr = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125] # 遍历数组,数字转字符,拼接完整字符串 result = ''.join([chr(num) for num in ascii_arr]) # 打印最终flag print("解密得到Flag:", result)代码分步拆解说明
- 数组定义:把题目给出的数字列表存入变量
ascii_arr; - 列表推导式转换:
[chr(num) for num in ascii_arr]循环读取每一个数字,批量转换为字符,生成字符列表; - 字符串拼接:
''.join()将零散的字符列表合并为一整段明文; - 输出结果:打印拼接完成的 flag 字符串。
四、运行结果与逐位校验
1. 脚本运行输出
执行代码后控制台直接输出:
plaintext
解密得到Flag: crypto{ASCII_pr1nt4bl3}2. 数组逐位 ASCII 映射对照表
为验证结果真实性,我们将数组中每一个数字与对应字符一一对应:
表格
| ASCII 十进制数值 | 对应字符 | ASCII 十进制数值 | 对应字符 |
|---|---|---|---|
| 99 | c | 73 | I |
| 114 | r | 95 | _ |
| 121 | y | 112 | p |
| 112 | p | 114 | r |
| 116 | t | 49 | 1 |
| 111 | o | 110 | n |
| 123 | { | 116 | t |
| 65 | A | 52 | 4 |
| 83 | S | 98 | b |
| 67 | C | 108 | l |
| 73 | I | 51 | 3 |
| - | - | 125 | } |
按顺序拼接所有字符,最终明文 flag:crypto{ASCII_pr1nt4bl3}
五、题型拓展与同类变形题解法
ASCII 编码是 CTF 高频基础考点,除了本次纯十进制数字题型,常见变形拓展如下:
- 十六进制 ASCII:题目给出 0x63、0x72 这类十六进制数字,需要先转为十进制再用
chr()解密; - 八进制 ASCII:数字以 0 开头,先进制转换再字符映射;
- 反向加密题型:给出明文,要求输出对应 ASCII 数字,此时改用
ord()函数处理; - 多段 ASCII 分段加密:长字符串拆分为多个数组分段,解密后拼接全部结果。
六、新手学习总结
- 本题是 CTF 密码学入门门槛最低的题型,无加密算法,仅考察基础编码与 Python 语法;
- 核心记忆点:数字转字符用
chr(),字符转数字用ord(); - 解题通用流程:读密文数组 → 循环转换编码 → 拼接输出明文;
- 学习建议:新手可以熟记常用符号、字母的 ASCII 区间,做题时快速预判解密结果格式,辅助校验脚本是否出错。
编程学习
技术分享
实战经验