当前位置: 首页 > news >正文

2025福建省数据安全大赛决赛wp

Crypto

 the key to AES

已知题目问题代码:

AES_ECB

from secret import flag, key
from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
from hashlib import *assert int(key) % 2 == 0def gen_key(key):padded_key = key.encode() + b'\x0a' * 10assert len(padded_key) == 16return padded_keydef encrypt(msg, key):padded_key = gen_key(key)aes = AES.new(padded_key, mode=AES.MODE_ECB)msg = aes.encrypt(msg)return msgc1 = md5(encrypt(b'0123456789abcdef', key)).hexdigest()
c2 = encrypt(pad(flag.encode(), 16), key)print(f'c1: {c1}')
print(f'c2: {c2}')'''
c1: 7f22b1ca2f586a84f6e676634cc1778a
c2: b'#\xa85\xde6\xab\xe1\xc8DWx\xa5O\xf9PJ\xf9\x8e\xf3PR\x9a\xb5H\x17\xe9\x8d\x01\xb9\xf4\x07\x15p\x98\xda\x81l\x17!\xb8\xcb\x88\xa1?\xe93G_'
'''

该密钥用 10 个字节的 0x0a 进行填充,以形成一个16字节的 AES 密钥。我们已知 c1,它是字符串 b'0123456789abcdef' 加密后的 MD5 哈希,以及 c2,它是填充后的 flag 的加密结果。通过暴力破解所有可能的偶数16位密钥,我们可以找到生成与 c1 匹配的 MD5 哈希的密钥。一旦找到密钥,我们就可以解密 c2 来获取 flag。

加密和解密函数:encrypt 函数使用 AES-ECB 加密消息,decrypt 函数使用相同密钥解密密文;
暴力破解循环:循环遍历 0 到 999999 之间的所有偶数,并格式化为 6 位字符串。对于每个密钥候选者,加密明文 b'0123456789abcdef',计算 MD5 哈希,并与 c1 比较;
当找到正确的密钥时,解密 c2 并去填充以显示 flag。

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import md5c1 = '7f22b1ca2f586a84f6e676634cc1778a'
c2 = b'#\xa85\xde6\xab\xe1\xc8DWx\xa5O\xf9PJ\xf9\x8e\xf3PR\x9a\xb5H\x17\xe9\x8d\x01\xb9\xf4\x07\x15p\x98\xda\x81l\x17!\xb8\xcb\x88\xa1?\xe93G_'def gen_key(key):padded_key = key.encode() + b'\x0a' * 10assert len(padded_key) == 16return padded_keydef encrypt(msg, key):padded_key = gen_key(key)aes = AES.new(padded_key, mode=AES.MODE_ECB)msg = aes.encrypt(msg)return msgdef decrypt(ciphertext, key):padded_key = gen_key(key)aes = AES.new(padded_key, mode=AES.MODE_ECB)msg = aes.decrypt(ciphertext)return msgplaintext1 = b'0123456789abcdef'
for i in range(0, 1000000, 2):candidate = str(i).zfill(6)ciphertext1 = encrypt(plaintext1, candidate)hash_value = md5(ciphertext1).hexdigest()if hash_value == c1:#print(f"Key found: {candidate}")flag_padded = decrypt(c2, candidate)flag = unpad(flag_padded, 16)print(flag.decode())break

 

MISC

 gif

题目是一个gif图片文件,可通过下载分帧图片,wps自带的可以直接下载分帧图片或者使用随波逐流。

ScreenShot_2025-11-28_054158_883

图片只有11张可以不使用工具,我们打开word将图片拖进去,修改页面宽度就可以对图片进行拼接。(可以不使用工具直接用手拼,很简单)

得到二维码。

再通过扫码得到flag。

 paint
通过分析图片的水印,LSB均没有发现。

我们使用010Editor打开发现有一段很奇怪的很长的16进制(应该是关键)

 

ScreenShot_2025-11-28_062531_367

 对16进制转为字符。发现字符为Base64,再通过Base64解码得到坐标。

ScreenShot_2025-11-28_062848_561

通过随波逐流工具将坐标转为二维码,在通过扫码得到flag。

http://www.zskr.cn/news/63437.html

相关文章:

  • 增强AI股票预测分析报告 - 2025年11月28日
  • 高性能AI股票预测分析报告 - 2025年11月28日
  • AI:网络安全的新防线与潜在威胁
  • 2025年下半年坑道钻机品牌哪家好:前十名解析
  • 2025年下半年探水钻机品牌综合推荐指南:十大优质供应商深度解析
  • DynamicGSG :一种利用动态高斯场景图,实现机器人环境自适应的方法 - MKT
  • 高斯重定位 - MKT
  • 北大高斯语义建图 - MKT
  • 2025杭州代办大额核定公司推荐:专业杭州税务筹划公司优选
  • 2025国内战略咨询公司哪家好?实力品牌咨询公司推荐
  • 常用 trick 记录
  • 移动端开发
  • 用ikuai软路由提供内网NTP服务
  • AutoVEI Truck Explorer Locksmith 2025: 700 Tokens for Truck Programming Diagnostics
  • AutoVEI Truck Explorer 2025 Updated: 700 Tokens Programming Diagnostic Tool for Euro/Amer Trucks
  • JDK:Linux下载安装jdk1.8
  • 图论中的核心C++算法,包括存储结构、核心思路、速记口诀以及学习方法, 一站式上机考试学习
  • hive 中 group by 和 distinct 孰优孰劣?
  • Python高阶知识点整理
  • Houdini软件简介
  • 2025 美本申请 SAT 高分指南:全国 TOP6培训机构甄选,从课程到服务全维度测评
  • 牺牲从不理所应当
  • 第四十一天
  • 第四十天
  • 一文入门 LangGraph 开发
  • Real people are important.
  • Scrum冲刺阶段 Day Four
  • Day26光标类型cursor
  • 部署django项目到阿里云服务器
  • 帮助类