【python】16_項目實例_MD5在線加密的應用

1.MD5在線加密解密工具介紹

https://www.cmd5.com/, 該網站針對md5、sha1等全球通用公開的加密算法進行反向查詢,通過窮舉字符組合的方式,創建了明文密文對應查詢數據庫,創建的記錄約90萬億條,佔用硬盤超過500TB,查詢成功率95%以上,很多複雜密文只有本站纔可查詢。已穩定運行十餘年,國內外享有盛譽。
在這裏插入圖片描述

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)

加密之後的結果:
在這裏插入圖片描述
MD5目前人類是無法解密的,目前人類的MD5解密方法是建立一個大型數據庫,將各個人的MD5數據存儲在這個數據庫裏面,然後將所需要解密的密碼放入該庫對比找到同樣原碼,如果沒有對比到數據,說明該密沒有被記錄過,也就是說沒有辦法解密了。

3.MD5在線加密解密的應用

需求:完成一個對銀行密碼進行MD5加密解密的應用,流程如下:
在這裏插入圖片描述
首先對銀行密碼(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('載入數據庫成功。。。')

在這裏插入圖片描述
此時,在當前目錄下會生成一個存儲明文-密文的json文件。
在這裏插入圖片描述
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('請輸入正確的選項')

結果顯示如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章