题目
某字符串的sm3的Hash值为
87ac62f09589286c893b27e7ea8742dfa399954d875e399e70118b4535c29dab
该字符串长度为13位,已知前面9个字符为"ZheMiBei-",后面四个字符均为小写字母。请找出该字符串。flag提交格式为flag{ZheMiBei-????}。
思路
第一步:编制4为小写字母的字典表由aaaa~zzzz,共计26^4=456976种可能;
第二步:拼接前缀字符串"ZheMiBei-",形成新字典表;
第三步:遍历字典表,每种可能做SM3-hash,与题目给出hash值对比。
若杂凑值相同则输出字符串。
Python实现代码
代码如下:
import itertools
from gmssl import sm3
letters = 'abcdefghijklmnopqrstuvwxyz' # 生成字典表,并拼接前缀
dictionary = ['ZheMiBei-' + ''.join(combo) for combo in itertools.product(letters, repeat=4)]
# SM3哈希函数
def sm3_hash(data:str):
data = [i for i in bytes(data.encode())]
sm3_hash_value = sm3.sm3_hash(data)
return sm3_hash_value
for i in range(len(dictionary)):
value = dictionary[i] # 依次取字典表中的值
hash_value = sm3_hash(value) # 计算SM3杂凑值
if hash_value =="87ac62f09589286c893b27e7ea8742dfa399954d875e399e70118b4535c29dab":
print("字符串:" + value + "\n该字符串SM3杂凑值为:" + hash_value)
break
运行结果
字符串:ZheMiBei-cryp
该字符串SM3杂凑值为:
87ac62f09589286c893b27e7ea8742dfa399954d875e399e70118b4535c29dab
easy!