通往哈希的旅程——crypto中的hash问题

先来看题目吧

在数字城,大家都是通过是通过数字电话进行的通信,常见是以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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值