加密流程分析
题目给出了一个加密后的密文,加密过程如下:
使用3字符密钥k0对flag进行AES-CBC加密,得到中间密文c0
使用同样长度的密钥k1对c0连续加密三次,得到最终密文c3
两个密钥均通过sha256从3字符明文生成
text
flag --[AES-CBC(k0)]--> c0 --[AES-CBC(k1)×3]--> c3
解题步骤
第一步:爆破k1
对c3做三次AES-CBC解密,每次解密后进行PKCS7补位校验。当三次解密都成功且补位合法时,说明k1正确,解密结果为c0。
第二步:爆破k0
对c0做一次AES-CBC解密并校验PKCS7补位,验证解密结果是否符合flag的UUID格式。找到匹配的k0即可得到最终flag。
优化方案
利用多进程/批量处理加速暴力搜索
使用PKCS7补位校验 + UUID格式校验作为快速剪枝条件
解题脚本框架
python
from Crypto.Cipher import AES import hashlib from multiprocessing import Pool def derive_key(plain_3chars): return hashlib.sha256(plain_3chars.encode()).digest() def try_decrypt_k1(c3, k1_candidate): # 连续3次AES-CBC解密,每次校验PKCS7 # 全部成功则返回c0 pass def try_decrypt_k0(c0, k0_candidate): # 一次AES-CBC解密,校验PKCS7且结果符合UUID格式 pass