先来看题目吧
在数字城,大家都是通过是通过数字电话进行的通信,常见是以188开头的11位纯血号码组成,亚历山大抵在一个特殊的地方截获一串特殊的字符串"ca12fd8250972ec363a16593356abb1f3cf3a16d",通过查阅发现这个跟以前散落的国度有点相似,可能是去往哈希国度的。年轻程序员亚力山大抵对这个国度充满好奇,决定破译这个哈希值。在经过一段时间的摸索后,亚力山大抵凭借强大的编程实力成功破解,在输入对应字符串后瞬间被传送到一个奇幻的数据世界,同时亚力山大抵也开始了他的进修之路。(提交格式:flag{11位号码})
显然结合题目名称,这是一道与hash函数加密有关的题目。
通过题目,我们可以提取以下信息:
1.明文是以188开头的11位正整数,即18800000000~18899999999.
2.密文是ca12fd8250972ec363a16593356abb1f3cf3a16d,由hash散列函数产生的字符串。
所以,我们很自然便会利用python构建脚本。
遍历符合条件的所有11位正整数,并依次计算对应的hash值,最终找到与密文ca12fd8250972ec363a16593356abb1f3cf3a16d一致的11位整数。
所以,构建脚本如下:
import hashlib
for i in range(18800000000,18900000000):
number=i
number_str=str(number).encode('utf-8')
hash=hashlib.sha1()
hash.update(number_str)
hash_val=hash.hexdigest()
if hash_val=='ca12fd8250972ec363a16593356abb1f3cf3a16d':
print(f"find the answer:",{number})
break
(PS:本人python脚本写的确实不咋地)
所以,find the answer: {18876011645}