2022网鼎杯crypto——crypto091

题目描述

小A鼓起勇气向女神索要电话号码,但女神一定要考考他。女神说她最近刚看了一篇发表于安全顶会USENIX Security 2021的论文,论文发现苹果AirDrop隔空投送功能的漏洞,该漏洞可以向陌生人泄露AirDrop发起者或接收者的电话号码和电子邮箱。小A经过一番努力,获得了女神手机在AirDrop时传输的手机号哈希值,但再往下就不会了,你能继续帮助他吗?小A只记得女神手机号是170号段首批放号的联通号码。
Hash:c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc
flag格式:flag{13位电话号码(纯数字,含国家代码)}

解题过程

由题,并查阅资料,得以下信息:

  • 该hash为sha256
    在这里插入图片描述
  • 根据当时的官方新闻,该号码前6位应为861709在这里插入图片描述
  • 题目为091,可推测号码前7位应为8617091

代码实现

解法1:

'''
Author: 白银
Date: 2022-08-26 10:13:46
LastEditTime: 2022-08-26 10:22:48
LastEditors: 白银
Description: 将号码分为前七后六,字符串拼接,后六范围为[000000, 999999],由于诸如`000000`的方式会被当成0处理,极大增加耗时,故选择为每一位单独遍历,这也导致低效
'''

import hashlib

# sha256加密
def jiami(byte):
    hash = hashlib.sha256()
    hash.update(bytes(byte, encoding='utf-8'))
    # print(hash.hexdigest())

    return hash.hexdigest()

# 枚举爆破
def enum(res, known):
    for i3 in range(0, 10):
        for i4 in range(0, 10):
            for i5 in range(0, 10):
                for i6 in range(0, 10):
                    for i7 in range(0, 10):
                        for i8 in range(0, 10):
                            if jiami(known + str(i3) + str(i4) + str(i5) + str(i6) + str(i7) + str(i8)) == res:
                                key = known + str(i3) + str(i4) + str(i5) + str(i6) + str(i7) + str(i8)
                                # break
                                return key


if __name__ == "__main__":
    print('flag{' + enum('c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc', '8617091') + '}')

解法2:

'''
Author: HSC-spmonkey
Description: 简单粗暴高效,直接按13位整数爆破
'''

import hashlib

sha256 = 'c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc'

for i in range(8617091000000, 8617100000000):
    hash = hashlib.sha256(str(i).encode('utf-8')).hexdigest()

    if hash == sha256:
        print(i)
        break

结果

得到flag:flag{8617091733716}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Captain杰派罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值