文章总结: 本文是CTFCrypto系列第四期,重点讲解哈希函数与AES对称加密基础。文章详细拆解了MD5/SHA系列的查询与碰撞解法,以及AES的ECB/CBC模式解密技巧。作者提供了Python脚本与工具推荐,结合实战演示了哈希、AES与异或的嵌套解题思路,并总结了新手避坑指南,适合CTF入门选手学习。 综合评分: 83 文章分类: CTF,安全培训,软文广告,安全工具
CTF Crypto模块系列分享(四):哈希与AES入门!搞定对称加密与哈希验证题
原创
龙哥网络安全 龙哥网络安全
龙哥网络安全
2026年1月30日 10:26 湖南
上期我们吃透了异或加密的两大高频场景,咱们就进入Crypto的另一大核心板块——哈希与对称加密基础。
哈希和对称加密是CTF Crypto中实用性极强的两类题型,既常作为独立签到/基础题,也常嵌套在复杂加密流程中(比如哈希验证+异或、AES加密+Base64编码)。
哈希题侧重查询与碰撞,对称加密题侧重密钥与模式,避开复杂数学原理,新手也能轻松上手,稳步拿下这类基础进阶分!
回顾系列分期,帮大家理清脉络:
📚 系列分期规划
- 第1期:Crypto入门——核心概念+题型分类+工具准备(已更)
- 第2期:经典基础算法——古典密码全解析(已更)
- 第3期:高频进阶算法——异或/XOR加密与破解实战(已更)
- 第4期:哈希与对称加密基础——MD5/SHA、AES入门(今天内容)
- 第5期:实战技巧大整合——解题框架+比赛策略+避坑指南(下期)
一、本期核心目标(新手必掌握)
今天我们不搞高深理论,聚焦比赛落地,新手学会这4点,就能应对80%的哈希与对称加密基础题:
- 掌握哈希核心考点:理解哈希特性,搞定MD5/SHA系列的哈希查询与简单碰撞。
- 吃透AES对称加密:掌握AES核心参数、加密模式,用工具/脚本完成解密。
- 识别题型特征:快速区分哈希题与对称加密题,匹配对应破解方法。
- 应对嵌套题型:哈希+编码、AES+异或的组合拆解思路。
本期重点聚焦基础题型,高阶哈希碰撞、AES复杂模式暂不涉及,先帮大家筑牢基础,再逐步进阶!
二、哈希函数基础:CTF高频考点全拆解
首先明确核心定义:哈希函数是“单向加密工具”,能将任意长度的明文,转化为固定长度的哈希值(一串十六进制字符串),核心特点是“明文→哈希值易,哈希值→明文难”,这也是CTF哈希题的出题核心。
- 核心特性(解题关键)
- 单向性:无法通过哈希值反向推导明文(除非暴力破解/彩虹表查询)。
- 固定长度:无论明文多长,哈希值长度固定
(MD5是32位,SHA-1是40位,SHA-256是64位)。 - 唯一性(理想状态):不同明文对应不同哈希值,若不同明文对应同一哈希值,即为“哈希碰撞”(CTF高频考点)。
-
CTF高频哈希算法(重点记这3个)
-
高频题型与破解方法(实战重点)
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等)。
- 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),今天重点讲解基础用法。
- AES核心参数(解题必记)
AES加密解密需匹配3个核心参数,参数不匹配会导致解密失败,这是新手最容易踩坑的点:
- 密钥(key):加密和解密的核心,CTF中多为16位、24位、32位字符串(对应AES-128、AES-192、AES-256)。
- 加密模式:基础题常考ECB(无偏移量,最简单)、CBC(需偏移量IV,16位字符串)。
- 填充方式:常用PKCS7Padding(默认),无需手动设置,工具/脚本会自动处理。
- 特征识别(快速定题型)
- 题目明确提示“AES”“对称加密”“密钥”“IV”(偏移量)。
- 密文多为Base64编码字符串(便于传输),或十六进制字符串。
- 题目会给出密钥,或提示密钥长度(16位等),部分题目会给出IV(CBC模式)。
- 工具破解(新手首选,快速高效)
优先用在线工具,无需编写复杂脚本,匹配参数即可解密:
- 推荐工具:CTF在线工具集(AES加密解密)、CryptoTool。
- 操作步骤(ECB模式,最基础):
① 粘贴密文(若为Base64,先解码为十六进制,或直接选择Base64格式)。
② 输入密钥(确保长度符合要求,16/24/32位)。
③ 选择加密模式(ECB)、填充方式(PKCS7Padding)。
④ 点击解密,获取明文Flag。
- CBC模式操作:在上述步骤基础上,添加IV(16位字符串),其余参数不变,即可解密。
- 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常与编码、异或嵌套,我们用一道真题简化版练习完整流程,串联前几期知识点:
- 题目:解码以下内容,得到Flag
提示:先AES解密,再MD5验证,最后异或(固定密钥)。
AES参数:密钥=“ctf_aes_key_1234”(16位),模式=ECB,密文(Base64):
“xYjF4aGpKZ2tSbWt6VlZNaGt0VlZKaGt6VlZGd2JtRnRaU0JwY25RdWJHOWpZVzVrY3lJNklqQT0=”。
MD5验证:AES解密后得到明文A,明文A的MD5哈希值为
“e10adc3949ba59abbe56e057f20f883e”。
异或:明文A与密钥“m”异或,得到最终Flag。
- 解题步骤(新手跟着做)
第一步: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入门!搞定对称加密与哈希验证题》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论