WP008——CTF赛题解析-16进制转字符串

121 阅读1分钟

时效性

2025年7月26日

题目来源

这不是md5 - Bugku CTF平台

题目描述

image.png

Write Up

随波逐流:16进制转字符串

image.png

总结

转换原理:

  1. 分割16进制字符串:每两个字符一组(例如 "4865"["48", "65"])。
  2. 转换为十进制整数:将每组16进制数转换为十进制(例如 "48" → 72)。
  3. 转换为ASCII字符:用十进制值获取对应字符(例如 72'H')。
  4. 拼接结果:将所有字符连接成字符串。
def hex_to_string(hex_str):
    # 移除空格和换行等无关字符
    hex_str = hex_str.replace(" ", "").replace("\n", "")
    
    # 检查长度是否为偶数
    if len(hex_str) % 2 != 0:
        raise ValueError("无效的16进制字符串(长度必须为偶数)")
    
    # 每两个字符一组,转换为字符串
    result = ""
    for i in range(0, len(hex_str), 2):
        hex_byte = hex_str[i:i+2]  # 提取两个字符(1字节)
        decimal_value = int(hex_byte, 16)  # 16进制 → 10进制
        result += chr(decimal_value)       # 10进制 → ASCII字符
    
    return result

# 示例用法
hex_input = "48656C6C6F20576F726C64"  # "Hello World"
print(hex_to_string(hex_input))  # 输出: Hello World