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

目录

    • 1. 给md5编码,明文缺省 ,求明文
    • 2. 根据部分密文和明文得到md5加密的完整明文
    • 3.
    • 总结


欢迎关注 『网络攻防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}')

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

注意是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)

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

明文是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】草稿(保姆级图文)
【更多内容敬请期待】


你可能感兴趣的:(python,网络工程专业,#,网络攻防ctf,网络,安全,web安全)