Hack The Box 入门密码学:ASCII 编码解题 Writeup

📅 2026/7/11 2:46:16 👁️ 阅读次数 📝 编程学习
Hack The Box 入门密码学:ASCII 编码解题 Writeup

前言

在 HTB(Hack The Box)的 General 栏目中,Encoding板块下的 ASCII 是密码学最基础的入门题型,主要考察对ASCII 编码的理解,利用十进制 ASCII 码值还原原始字符串,本篇文章完整梳理题目原理、解题思路、实操代码与知识点拓展。

一、题目分析

题目原文

ASCII is a 7-bit encoding standard which allows the representation of text using the integers 0–127. Using the below integer array, convert the numbers to their corresponding ASCII characters to obtain a flag. 数组:[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 119, 116, 52, 98, 108, 51, 125]提示:Python 中chr()可以将 ASCII 数值转为字符,ord()实现反向转换。

基础概念梳理

  1. ASCII:美国信息交换标准代码,采用 7 位二进制编码,取值范围十进制0 ~ 127,每一个数字唯一对应一个可打印 / 不可打印字符,字母、数字、英文标点都被收录在内。
  2. 两个 Python 核心内置函数
    • chr(n):接收十进制整数,返回对应的 ASCII 字符,本题核心函数。
    • ord(c):接收单个字符,返回其对应的十进制 ASCII 码,为逆向操作。

二、解题过程

方法 1:Python 代码批量转换(推荐)

将给出的数字数组遍历,逐个使用chr()进行转换,最后拼接所有字符得到 Flag,完整代码如下:

# 定义ASCII十进制数组 ascii_arr = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 119, 116, 52, 98, 108, 51, 125] # 遍历数组转换字符并拼接字符串 flag = "".join([chr(num) for num in ascii_arr]) # 输出最终flag print(flag)

运行代码后输出结果:crypto{ASCII_pr1wt4bl3}

方法 2:在线 ASCII 解码器(新手快速解法)

如果暂时不会编写 Python 代码,可以直接使用在线 ASCII 十进制转字符工具,将全部数字粘贴进输入框,一键解码即可拿到 Flag,适合零基础快速通关。

手动查表(不推荐)

可以对照 ASCII 编码表,逐个查询每一个十进制数字对应的字符,缺点是数组元素较多,效率低,很容易出现人为失误,仅用来理解原理即可。

三、结果解析

最终得到的 flag:crypto{ASCII_pr1wt4bl3}拆解字符串可以直观验证编码逻辑:

  • crypto{对应数组前 7 位数值
  • ASCII_pr1wt4bl3}为花括号内部的密码字符串,数字1、4、3用来替换字母,是 CTF 题目里很常见的变形手法。

四、知识点拓展

  1. 反向题型:给出字符串,获取 ASCII 码,使用ord()实现,示例代码
s = "crypto" res = [ord(i) for i in s] print(res) # 输出 [99, 114, 121, 112, 116, 111],和本题数组开头完全对应
  1. 区分 ASCII 与 Hex(十六进制)页面下方紧接着 Hex 题型,十六进制是将 ASCII 十进制转为 16 进制表示,例如字符c十进制为 99,转为十六进制就是63,后续可以用bytes.fromhex()在 Python 中解码十六进制字符串。
  2. 拓展小知识:标准 ASCII 为 7bit,拓展 ASCII 使用 8bit,取值范围0~255,可以收录西欧字符,而中文无法使用 ASCII 编码,需要 GBK、UTF-8 等编码格式。

五、做题总结

这道 HTB ASCII 编码题是 CTF 密码学的敲门砖,核心只需要记住chr()ord()两个函数,理解数字和字符的映射关系。后续很多编码类题目(十六进制、Base 系列编码)都是在 ASCII 的基础上衍生而来,吃透本题能够为后续编码类题型打下扎实基础。