Hash,通常翻譯作「散列」,也有直接音譯爲」哈希」的,就是把任意長度的輸入(又叫作預映射,pre-image),經過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間一般遠小於輸入的空間,不一樣的輸入可能會散列成相同的輸出,而不可能從散列值來惟一的肯定輸入值。算法
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。數據庫
HASH主要用於信息安全領域中加密算法,他把一些不一樣長度的信息轉化成雜亂的128位的編碼裏,叫作HASH值.也能夠說,hash就是找到一種數據內容和數據存放地址之間的映射關係安全
什麼是MD5算法dom
MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被普遍使用的密碼雜湊函數,能夠產生出一個128位的散列值(hash value),用於確保信息傳輸完整一致。MD5的前身有MD二、MD3和MD4。函數
MD5功能網站
輸入任意長度的信息,通過處理,輸出爲128位的信息(數字指紋);
不一樣的輸入獲得的不一樣的結果(惟一性);編碼
MD5算法的特色加密
MD5算法是否可逆?spa
MD5不可逆的緣由是其是一種散列函數,使用的是hash算法,在計算過程當中原文的部分信息是丟失了的。翻譯
MD5用途
防止被篡改:
好比發送一個電子文檔,發送前,我先獲得MD5的輸出結果a。而後在對方收到電子文檔後,對方也獲得一個MD5的輸出結果b。若是a與b同樣就表明中途未被篡改。
好比我提供文件下載,爲了防止不法分子在安裝程序中添加木馬,我能夠在網站上公佈由安裝文件獲得的MD5輸出結果。
SVN在檢測文件是否在CheckOut後被修改過,也是用到了MD5.
防止直接看到明文:
防止抵賴(數字簽名):
利用hashlib模塊寫一個md5加密的程序:
import hashlib,string,random def make_md5(string): str = hashlib.md5() #調用md5方法 str.update(bytes(string,encoding="utf-8")) #傳入bytes類型的字符 print(str.hexdigest()) #輸出加密後的字符 with open("pwd.txt","a+",encoding="utf-8") as f: f.write(string + "-" + str.hexdigest() +"\n") while True: username = input("請輸入用戶名:") # str = input("請輸入要生成MD5的字符串:") make_md5(str)