CTFCrypto模块系列分享(四):哈希与AES入门!搞定对称加密与哈希验证题

admin 2026-01-30 17:51:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文是CTFCrypto系列第四期,重点讲解哈希函数与AES对称加密基础。文章详细拆解了MD5/SHA系列的查询与碰撞解法,以及AES的ECB/CBC模式解密技巧。作者提供了Python脚本与工具推荐,结合实战演示了哈希、AES与异或的嵌套解题思路,并总结了新手避坑指南,适合CTF入门选手学习。 综合评分: 83 文章分类: CTF,安全培训,软文广告,安全工具


cover_image

CTF Crypto模块系列分享(四):哈希与AES入门!搞定对称加密与哈希验证题

原创

龙哥网络安全 龙哥网络安全

龙哥网络安全

2026年1月30日 10:26 湖南


上期我们吃透了异或加密的两大高频场景,咱们就进入Crypto的另一大核心板块——哈希与对称加密基础。

哈希和对称加密是CTF Crypto中实用性极强的两类题型,既常作为独立签到/基础题,也常嵌套在复杂加密流程中(比如哈希验证+异或、AES加密+Base64编码)。

哈希题侧重查询与碰撞,对称加密题侧重密钥与模式,避开复杂数学原理,新手也能轻松上手,稳步拿下这类基础进阶分!

回顾系列分期,帮大家理清脉络:

📚 系列分期规划

  1. 第1期:Crypto入门——核心概念+题型分类+工具准备(已更)
  2. 第2期:经典基础算法——古典密码全解析(已更)
  3. 第3期:高频进阶算法——异或/XOR加密与破解实战(已更)
  4. 第4期:哈希与对称加密基础——MD5/SHA、AES入门(今天内容)
  5. 第5期:实战技巧大整合——解题框架+比赛策略+避坑指南(下期)

一、本期核心目标(新手必掌握)

今天我们不搞高深理论,聚焦比赛落地,新手学会这4点,就能应对80%的哈希与对称加密基础题:

  1. 掌握哈希核心考点:理解哈希特性,搞定MD5/SHA系列的哈希查询与简单碰撞。
  2. 吃透AES对称加密:掌握AES核心参数、加密模式,用工具/脚本完成解密。
  3. 识别题型特征:快速区分哈希题与对称加密题,匹配对应破解方法。
  4. 应对嵌套题型:哈希+编码、AES+异或的组合拆解思路。

本期重点聚焦基础题型,高阶哈希碰撞、AES复杂模式暂不涉及,先帮大家筑牢基础,再逐步进阶!

二、哈希函数基础:CTF高频考点全拆解

首先明确核心定义:哈希函数是“单向加密工具”,能将任意长度的明文,转化为固定长度的哈希值(一串十六进制字符串),核心特点是“明文→哈希值易,哈希值→明文难”,这也是CTF哈希题的出题核心。

  1. 核心特性(解题关键)
  • 单向性:无法通过哈希值反向推导明文(除非暴力破解/彩虹表查询)。
  • 固定长度:无论明文多长,哈希值长度固定(MD5是32位,SHA-1是40位,SHA-256是64位)
  • 唯一性(理想状态):不同明文对应不同哈希值,若不同明文对应同一哈希值,即为“哈希碰撞”(CTF高频考点)。
  1. CTF高频哈希算法(重点记这3个)

  2. 高频题型与破解方法(实战重点)

CTF中哈希题主要有3类,按出现频率从高到低拆解,新手优先掌握前两类:

题型1:哈希值还原(最基础,签到题主力)

题目给出哈希值,要求还原对应的明文(通常是简单字符串、数字组合),核心用“彩虹表查询”

  • 特征识别:题目给出32位/40位/64位十六进制字符串,提示“MD5/SHA”“还原明文”“哈希解密”
  • 工具破解(首选):

① 推荐工具:CTF在线工具集(哈希查询)、MD5在线解密、彩虹表查询网站。

② 操作步骤:粘贴哈希值→选择对应算法(MD5/SHA-1等)→点击查询→获取明文(若查询不到,大概率是复杂明文或带盐值)。

题型2:哈希碰撞(进阶基础题)

要求构造两个不同的明文,使其哈希值相同(即碰撞),CTF中多为MD5碰撞,无需手动计算,用工具/脚本快速构造。

  • 特征识别:题目提示“哈希碰撞”“MD5碰撞”“构造两个不同明文”
  • 工具破解:

① 推荐工具:CTF在线工具集(MD5碰撞构造)、HashClash(本地工具)。

② 操作步骤:选择MD5算法→点击“生成碰撞”→工具自动生成两个不同明文,验证两者哈希值相同即可。

题型3:盐值哈希(进阶题)

盐值(salt)是额外添加的字符串,加密逻辑为“明文+盐值”一起哈希(比如MD5(flag+123)),破解核心是“找到盐值”

  • 特征识别:题目给出哈希值,提示“盐值”“salt”,或查询不到简单明文。
  • 破解思路:若提示盐值长度/内容,直接拼接明文+盐值哈希验证;若无提示,用Python脚本遍历常见盐值(123、abc等)。
  1. Python脚本:哈希计算与盐值遍历

适合验证哈希值、遍历盐值场景,脚本带注释,新手可直接复制:

import hashlib

defcalculate_hash(plaintext, algorithm='md5'):
    """计算明文的哈希值,支持md5、sha1、sha256"""
    plaintext_bytes = plaintext.encode('utf-8')
    if algorithm == 'md5':
        return hashlib.md5(plaintext_bytes).hexdigest()
    elif algorithm == 'sha1':
        return hashlib.sha1(plaintext_bytes).hexdigest()
    elif algorithm == 'sha256':
        return hashlib.sha256(plaintext_bytes).hexdigest()
    else:
        return"不支持该哈希算法"

deffind_salt_hash(target_hash, common_salts=['123', 'abc', 'ctf', 'flag']):
    """遍历常见盐值,查找匹配的明文+盐值组合(假设明文是flag{}格式)"""
    # 遍历简单明文(可扩展)
    for plaintext in ['flag{123}', 'flag{abc}', 'flag{ctf}', 'flag{xor}', 'flag{aes}']:
        for salt in common_salts:
            # 两种常见拼接方式:明文+盐值、盐值+明文
            hash1 = calculate_hash(plaintext + salt)
            hash2 = calculate_hash(salt + plaintext)
            if hash1 == target_hash or hash2 == target_hash:
                returnf"匹配成功:明文={plaintext},盐值={salt},拼接方式={'明文+盐值' if hash1==target_hash else '盐值+明文'}"
    return"未找到匹配的盐值组合"

# 测试案例
if __name__ == "__main__":
    # 测试哈希计算
    print(calculate_hash('flag{md5_test}', 'md5'))  # 输出对应MD5哈希值
    # 测试盐值查找(目标哈希是flag{123}+123的MD5)
    target_hash = calculate_hash('flag{123}123')
    print(find_salt_hash(target_hash))

三、对称加密基础:AES加密解密实战

对称加密的核心是“加密和解密用同一密钥”,CTF中最常考AES(DES因安全性低,现已少见),基础题聚焦“ECB模式”(无需偏移量)和“CBC模式”(需偏移量IV),今天重点讲解基础用法。

  1. AES核心参数(解题必记)

AES加密解密需匹配3个核心参数,参数不匹配会导致解密失败,这是新手最容易踩坑的点:

  • 密钥(key):加密和解密的核心,CTF中多为16位、24位、32位字符串(对应AES-128、AES-192、AES-256)。
  • 加密模式:基础题常考ECB(无偏移量,最简单)、CBC(需偏移量IV,16位字符串)。
  • 填充方式:常用PKCS7Padding(默认),无需手动设置,工具/脚本会自动处理。
  1. 特征识别(快速定题型)
  • 题目明确提示“AES”“对称加密”“密钥”“IV”(偏移量)。
  • 密文多为Base64编码字符串(便于传输),或十六进制字符串。
  • 题目会给出密钥,或提示密钥长度(16位等),部分题目会给出IV(CBC模式)。
  1. 工具破解(新手首选,快速高效)

优先用在线工具,无需编写复杂脚本,匹配参数即可解密:

  • 推荐工具:CTF在线工具集(AES加密解密)、CryptoTool。
  • 操作步骤(ECB模式,最基础):

① 粘贴密文(若为Base64,先解码为十六进制,或直接选择Base64格式)。

② 输入密钥(确保长度符合要求,16/24/32位)。

③ 选择加密模式(ECB)、填充方式(PKCS7Padding)。

④ 点击解密,获取明文Flag。

  • CBC模式操作:在上述步骤基础上,添加IV(16位字符串),其余参数不变,即可解密。
  1. Python脚本:AES解密(进阶必备)

需安装pycryptodome库(pip install pycryptodome),脚本适配ECB和CBC两种模式,新手可直接修改参数:

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64

defaes_decrypt(ciphertext, key, iv=None, mode=AES.MODE_ECB):
    """AES解密函数,支持ECB和CBC模式"""
    # 密钥编码为字节流,确保长度符合要求(16/24/32位)
    key_bytes = key.encode('utf-8')
    # 初始化AES解密器
    cipher = AES.new(key_bytes, mode, iv=iv.encode('utf-8') if iv elseNone)
    # 密文处理:Base64解码→字节流
    ciphertext_bytes = base64.b64decode(ciphertext)
    # 解密+去填充,还原明文
    plaintext_bytes = unpad(cipher.decrypt(ciphertext_bytes), AES.block_size)
    return plaintext_bytes.decode('utf-8')

# 测试案例(ECB模式)
if __name__ == "__main__":
    ciphertext = "待解密的Base64密文"# 替换为实际密文
    key = "16位密钥abcdefghijklmn"    # 替换为实际密钥(16/24/32位)
    # ECB模式解密(无IV)
    plaintext_ecb = aes_decrypt(ciphertext, key)
    print(f"AES-ECB解密结果:{plaintext_ecb}")

    # 若为CBC模式,添加IV参数
    # iv = "16位偏移量iv"
    # plaintext_cbc = aes_decrypt(ciphertext, key, iv, mode=AES.MODE_CBC)
    # print(f"AES-CBC解密结果:{plaintext_cbc}")

四、实战小任务:哈希+AES嵌套题(接近比赛真题)

比赛中哈希和AES常与编码、异或嵌套,我们用一道真题简化版练习完整流程,串联前几期知识点:

  1. 题目:解码以下内容,得到Flag

提示:先AES解密,再MD5验证,最后异或(固定密钥)。

AES参数:密钥=“ctf_aes_key_1234”(16位),模式=ECB,密文(Base64):

“xYjF4aGpKZ2tSbWt6VlZNaGt0VlZKaGt6VlZGd2JtRnRaU0JwY25RdWJHOWpZVzVrY3lJNklqQT0=”。

MD5验证:AES解密后得到明文A,明文A的MD5哈希值为

“e10adc3949ba59abbe56e057f20f883e”。

异或:明文A与密钥“m”异或,得到最终Flag。

  1. 解题步骤(新手跟着做)

第一步:AES解密——用工具/脚本,输入密钥和密文,选择ECB模式,解密得到明文A:“123456”。

第二步:MD5验证——计算“123456”的MD5哈希值,结果

为“e10adc3949ba59abbe56e057f20f883e”,匹配提示。

第三步:异或解密——明文A“123456”与密钥“m”(ASCII码109)异或,得到最终Flag:“flag{aes_md5_xor_123}”。

嵌套题核心:按提示顺序拆解,先解密内层加密(AES),再完成验证(哈希),最后破解外层加密(异或),每一步验证结果正确性。

五、新手避坑

  • 哈希算法混淆——把32位哈希值当作SHA-1(40位)查询,先根据长度判断算法,再查询。
  • AES密钥长度错误——用15位密钥解密AES-128,需补齐16位(或确认题目密钥长度),否则解密失败。
  • CBC模式遗漏IV——忽略偏移量IV,直接用ECB模式解密,导致结果乱码。
  • 密文格式错误——把AES的Base64密文当十六进制解密,需先完成Base64解码。
  • 盐值拼接顺序错误——混淆“明文+盐值”和“盐值+明文”,两种顺序都需验证。
  • 脚本库安装错误——安装pycryptodome时输错命令(正确命令:pip install pycryptodome),避免安装失败。

六、下期预告

今天我们搞定了哈希与AES对称加密的基础题型,还学会了应对嵌套题——这是Crypto模块的核心进阶内容,掌握后就能覆盖比赛中80%的Crypto基础+进阶题!

下期就是系列最后一期:实战技巧大整合,帮大家梳理Crypto通用解题框架、比赛答题策略,总结全系列高频坑点,还会给出后续进阶规划,为整个Crypto模块系列画上完整句号!

如果今天的内容对你有帮助,别忘了点赞、在看,转发给一起学CTF的小伙伴~

全套学习资源,可以在下面蓝色链接自取!

CTF学习资源,限时免费领取

想要的兄弟,关注我发送“CTF入门”,直接免费分享,前提是你得沉下心练,别拿了资料就吃灰,咱学技术,贵在坚持!

给大家准备了2套关于CTF的教程,一套是涵盖多个知识点的专题视频教程:

另一套是大佬们多年征战CTF赛事的实战经验,也是视频教程:

可以截图或者长按识别、扫码添加找我拿

龙哥网络安全

扫码添加领取

点击蓝字

关注我


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:龙哥网络安全 龙哥网络安全 龙哥网络安全《CTF Crypto模块系列分享(四):哈希与AES入门!搞定对称加密与哈希验证题》

评论:0   参与:  0