1.MD5在线加密解密工具介绍

该网站针对md5、sha1等全球通用公开的加密算法进行反向查询,通过穷举字符组合的方式,创建了明文密文对应查询数据库,创建的记录约90万亿条,占用硬盘超过500TB,查询成功率95%以上,很多复杂密文只有本站才可查询。已稳定运行十余年,国内外享有盛誉。

python crypto md5解密 python对md5值得解密_json

2.MD5简介

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。hashlib库进行md5加密,操作如下:

# Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。hashlib库进行md5加密,操作如下
import hashlib

# md5加密需要传递的时bytes类型
passwd = b'123456'
md5_passwd = hashlib.md5(passwd).hexdigest()
print(md5_passwd)

加密之后的结果:

python crypto md5解密 python对md5值得解密_git_02


MD5目前人类是无法解密的,目前人类的MD5解密方法是建立一个大型数据库,将各个人的MD5数据存储在这个数据库里面,然后将所需要解密的密码放入该库对比找到同样原码,如果没有对比到数据,说明该密没有被记录过,也就是说没有办法解密了。

3.MD5在线加密解密的应用

需求:完成一个对银行密码进行MD5加密解密的应用,流程如下:

python crypto md5解密 python对md5值得解密_python crypto md5解密_03


首先对银行密码(6个数字组成)进行穷举并MD5加密,然后存储到数据库中。在客户端输入选项(加密/解密),如果是加密,则直接显示结果;如果是解密,则把输入的密码密文与数据库中的明文-密文进行一一比对,输出密文对应的明文结果。

Step 1:穷举6位数的银行密码,进行MD5加密之后存储到.json文件中

import hashlib
import json
import tqdm    #是一个进度条库,可以在python长循环中加一个进度提示信息
from string import digits
db = {}

for item1 in tqdm.tqdm(digits): #这个循环太长,导致等待时间很长,所以友好显示进度条
    for item2 in digits:
        for item3 in digits:
            for item4 in digits:
                for item5 in digits:
                    for item6 in digits:
                        #passwd 此时是str类型
                        passwd = item1 + item2 + item3 + item4 + item5 + item6
                        #md5加密需要的字符串时bytes类型, 将utf-8的编码格式编码成bytes类型
                        bytes_passwd = passwd.encode('utf-8')
                        md5_passwd = hashlib.md5(bytes_passwd).hexdigest()
                        db[md5_passwd] = passwd
# 将db字典的信息以json的格式存储到passwd.json文件中
json.dump(db,open('passwd.json','w'))
print('载入数据库成功。。。')

python crypto md5解密 python对md5值得解密_json_04


此时,在当前目录下会生成一个存储明文-密文的json文件。

python crypto md5解密 python对md5值得解密_json_05


Step 2:将json文件导入内存中用dict存储,以便查询对应关系。

import hashlib
import json

db = {}
filename = 'passwd.json'
db = json.load(open(filename,'r'))

while True:
    choice = input('1).加密 2).解密 q).退出>>>')

    if choice == '1':
        passwd = input('请输入要加密的明文>>>')
        bytes_passwd = passwd.encode('utf-8')
        md5_passwd = hashlib.md5(bytes_passwd).hexdigest()
        print('加密之后的密文为>>>'+md5_passwd)
    elif choice == '2':
        passwd = input('请输入要解密的密文>>>')
        print('解密之后的密文为>>>')
        print(db.get(passwd,'抱歉,当前密文无法解密'))
    elif choice == 'q':
        print('您正在退出MD5加密解密系统。。。')
        exit(0)
    else:
        print('请输入正确的选项')

结果显示如下:

python crypto md5解密 python对md5值得解密_python crypto md5解密_06