MD5簡介
原理略,只需要知道它是對一段信息產生128位的hash值,且不可逆。
因此不難想到它的一些應用:
1)密碼管理
當我們需要保存某些密碼信息以用於身份確認時,如果直接將密碼信息以明碼方式保存在數據庫中,不使用任何保密措施,系統管理員就很容易能得到原來的密碼信息,這些信息一旦泄露, 密碼也很容易被破譯。MD5算法可以很好地解決這個問題,因為它可以將任意長度的輸入串經過計算得到固定長度的輸出,而且只有在明文相同的情況下,才能等到相同的密文,並且這個算法是不可逆的,即便得到了加密以后的密文,也不可能通過解密算法反算出明文。這樣就可以把用戶的密碼以MD5值(或類似的其它算法)的方式保存起來,用戶注冊的時候,系統是把用戶輸入的密碼計算成 MD5 值,然后再去和系統中保存的 MD5 值進行比較,如果密文相同,就可以認定密碼是正確的,否則密碼錯誤。通過這樣的步驟,系統在並不知道用戶密碼明碼的情況下就可以確定用戶登錄系統的合法性。
2)電子簽名
使用 MD5算法就可以為任何文件(不管其大小、格式、數量)產生一個獨一無二的“數字指紋”,借助這個“數字指紋”,通過檢查文件前后 MD5 值是否發生了改變,就可以知道源文件是否被改動。我們在下載軟件的時候經常會發現,軟件的下載頁面上除了會提供軟件的下載地址以外,還會給出一串長長的字符串。這串字符串其實就是該軟件的MD5 值,它的作用就在於下載該軟件后,對下載得到的文件用專門的軟件(如 Windows MD5 check 等)做一次 MD5 校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用 MD5 算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面
3)垃圾郵件篩選
在電子郵件使用越來越普遍的情況下,可以利用 MD5 算法在郵件接收服務器上進行垃圾郵件的篩選,以減少此類郵件的干擾,具體思路如下:
-
建立一個郵件 MD5 值資料庫,分別儲存郵件的 MD5 值、允許出現的次數(假定為 3)和出現次數(初值為零)。
-
對每一封收到的郵件,將它的正文部分進行MD5 計算,得到 MD5 值,將這個值在資料庫中進行搜索。
-
如未發現相同的 MD5 值,說明此郵件是第一次收到,將此 MD5 值存入資料庫,並將出現次數置為1,轉到第五步。
-
如發現相同的 MD5 值,說明收到過同樣內容的郵件,將出現次數加 1,並與允許出現次數相比較,如小於允許出現次數,就轉到第五步。否則中止接收該郵件。結束。
-
接收該郵件
MD5加密
使用python
import hashlib def md5(str): m = hashlib.md5(str.encode(encoding='utf-8')) return m.hexdigest() print(md5('a')) print(md5('世界'))
使用Windows自帶工具
CertUtil -hashfile <path to file> MD5
根據文件大小計算需要幾秒鍾,如果成功,MD5 hash值將顯示如下:
C:\Users\20928\Downloads>CertUtil -hashfile a.txt MD5 MD5 的 a.txt 哈希: c086b3008aca0efa8f2ded065d6afb50 CertUtil: -hashfile 命令成功完成。
也可以為其他 hash 算法生成校驗和,用以下任意一個參數替換上面使用的 MD5 (注意,如果沒有指定值,則默認使用 SHA1)
- MD2
- MD4
- MD5
- SHA1
- SHA256
- SHA384
- SHA512
因此,下一次當你下載完文件記得試一試。
MD5解密
hash算法本身是不可逆的,但是一個特定的字符串其MD5值也是確定、唯一的,因此很直接地想到一種方法:對不同的串計算MD5,直到算出的MD5與給定的相同,這個串就是我們要找的串。當然,這個工作量巨大,這種方法沒有實際作用。
但是,已有許多數據庫存儲常用的明文密文對,可以幫助我們解密。
例如,https://www.cmd5.com/
參考鏈接:
1. 陳柏林的Blog-Windows 10(7) 內置 MD5 校驗和計算工具
2. CSDN-大蛇王-python 對字符串進行md5加密
3. 百度百科-MD5