【网络攻防CTF】根据明文提示用python得到md5和sha1的密文或是还原明文(保姆级图文)


欢迎关注 『网络攻防CTF』 系列,持续更新中
欢迎关注 『网络攻防CTF』 系列,持续更新中

整理的思路是穷举法,根据提示凑可能的字符,下面的题目为了演示,缺省的字符默认是数字字母了,比较难的题目可能还会有可能是标点符号等等,思路类似。

1. 给md5编码,明文缺省 ,求明文

已知一段md5密文

fa2cdddd07f211664697797a54de08ea

已知线索 明文为: flag{Th?s A Pen},求明文

import hashlib

for i in range(32, 127):  # 使用for循环逐个尝试所有的字母,chr(i)返回值是当前整数对应的 ASCII 字符。
    m = hashlib.md5()  # 获取一个md5加密算法对象
    m.update(str('flag{Th' + chr(i) + 's A Pen}').encode('utf-8'))  # 指定需要加密的字符串
    des = m.hexdigest()  # 进行md5加密
    if des == 'fa2cdddd07f211664697797a54de08ea':  # 如果得到的密文和我们预期的密文相同,输出
        print('flag{Th' + chr(i) + 's A Pen}')

在这里插入图片描述

注意是l 不是This

flag{Th1s A Pen}

2. 根据部分密文和明文得到md5加密的完整明文

这里有一段丢失的md5密文

7257f353cab82f3087cb2113533???

要求你还原出他的明文

已知线索 明文为: flag{HELLO WOR??}

import hashlib

for i in range(32, 127):
    for j in range(32, 127):
        m = hashlib.md5()  # 获取一个md5加密算法对象
        m.update(str('flag{HELLO WOR' + chr(i) + chr(j) + '}').encode("utf-8"))  # 指定需要加密的字符串
        des = m.hexdigest()
        if '7257f353cab82f3087cb2113533' in des:  # 如果得到的密文和我们预期的密文相同,输出
            print(des)

在这里插入图片描述

明文是7257f353cab82f3087cb2113533997e4


3.

这里有一段丢失的sha1密文

89aa???0bfd7da1409???c8c76e0461aaf9???

要求你还原出他的原值和hash值

已知线索 明文为: fl??{HELLO ?ORLD}

# @Time    : 2022/3/11 11:07
# @Author  : 南黎
# @FileName: 3.py
import hashlib

for i in range(32, 127):
    for j in range(32, 127):
        for k in range(32, 127):
            m = hashlib.sha1()  # 获取一个md5加密算法对象

            m.update(('fl' + chr(i) + chr(j) + '{HELLO ' + chr(k) + 'ORLD}').encode("utf8"))  # 指定需要加密的字符串
            des = m.hexdigest()
            if "89aa" in des and "0bfd7da1409" in des and "c8c76e0461aaf9" in des:  # 如果得到的密文和我们预期的密文有相同的字符串子串,输出
                print(des)
                print('fl' + chr(i) + chr(j) + '{HELLO ' + chr(k) + 'ORLD}')

m = hashlib.sha1()
  • 解释
    有人认为这样的写法会导致顺序颠倒的情况也被输出,但是事实上因为编码的机制,很难出现同样的字符但是排列组合的问题,而且此题中解答只有一条,如果真的有亿万分之一的概率出现了,那么再改良一下这个判断吧。
if "89aa" in des and "0bfd7da1409" in des and "c8c76e0461aaf9" in des:  # 如果得到的密文和我们预期的密文有相同的字符串子串,输出
     print(des)

flag{HELLO WORLD}

89aa2920bfd7da1409485c8c76e0461aaf92aff0


总结

大家喜欢的话,给个👍,点个关注!继续跟大家分享敲代码过程中遇到的问题!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-3-6

欢迎关注 『网络攻防CTF』 系列,持续更新中
欢迎关注 『网络攻防CTF』 系列,持续更新中
【网络攻防CTF】草稿(保姆级图文)
【更多内容敬请期待】


  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发现你走远了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值