python中的hashlib模組的使用
hashlib模組
#雜湊演算法也叫摘要演算法,相同的資料始終得到相同的輸出,不同的資料得到不同的輸出。
#(1)雜湊將不可變的任意長度的資料,變成具有固定長度的唯一值
#(2)字典的鍵值對對映關係是通過雜湊計算的,雜湊儲存的資料是雜湊(無序)
# 應用場景:在需要效驗功能時使用
使用者密碼的 => 加密,解密
相關效驗的 => 加密,解密
hashlib中的MD5演算法
# 第一步是引包 import hashlib # 建立一個md5演算法的物件 hs = hashlib.md5() # print(hs) # update中的 引數必須是二進位制位元組流 hs.update("123".encode()) ## hexdigest 返回32位十六進位制的字串(固定長度) ## 用一個hsvar來接收經過雜湊演算法返回的值 hsvar = hs.hexdigest()
#加鹽 (就是在簡單的演算法中進行加入混餚引數)
語法格式如下:
#首先在例項化hashlib中的MD5物件的時候,加入混淆引數key,以此達到更加複雜的加密) #加入的key引數一定也要是位元組流 hs2 = hashlib.md5("abcd".encode()) hs2.update("123123".encode()) hs2var = hs2.hexdigest()
加鹽後的好處就是,增加了加密的安全性,使其不那麼容易被破解
但因為hash演算法是被公開的演算法,其安全性不那麼好,一些簡單的加密 值很容易被逆向破解出來,說逆向破解也不那麼準確,
一般來說,破解此類演算法只能使用窮舉法, 可以將 跑出來的值存入到一個大的資料庫中,雜湊演算法得出的值有唯一性,所以可以反向查詢已有的hash值來得到原始資料,當然這種網站也有, 我百度上看到的一個網站,你們可以進去看一看,一般的雜湊值都能查詢到原資料,只要他們資料庫中有的話.
所以說最好的方法就是我們要加鹽,去加入複雜混餚引數,這樣的話大大提高了資料加密的安全性
連結:https://www.cmd5.com/ md5解密(本連結只作為學習使用,勿將其使用到任何非法用途)
在開發程式設計中,常用到hash演算法的方面應該有使用者的註冊登入
下面有我寫的一個例項,供大家參考(為了方便大家的閱讀,這個註冊登入功能我沒有完善,比如說用正則去卡使用者名稱和密碼的格式等等,)
import hashlib #定義一個加密函式,將傳入的引數轉換成32位的雜湊值並返回 def md5(pwd): md5_password = hashlib.md5("abd".encode()) md5_password.update(pwd.encode()) return md5_password.hexdigest() #定義一個登入函式,將傳入的賬號密碼與本地密碼檔案進行匹配,如果匹配到返回True def login(user,pwd): with open("database","r",encoding="utf-8") as fp: for line in fp : u,p = line.strip().split("|") if u == user and p == md5(pwd): return True #定義一個註冊的函式,將使用者傳入的賬號密碼寫入到本地的密碼檔案中 def register(user,pwd): with open("database","w",encoding="utf-8") as fp: temp= user+ "|" + md5(pwd) fp.write(temp) #index選單,給使用者的互動 choice = input("1表示登入, 2表示註冊:").strip() if choice == "2": user = input("使用者名稱:") pwd = input("密碼:") register(user,pwd) elif choice == "1": user = input("使用者名稱:") pwd = input("密碼:") r = login(user,pwd) if r == True: print("登入成功") else: print("登入失敗") else: print("賬號不存在")
hashlib中的sha演算法
- # sha 加密效率低,演算法精密,安全性高
- sha: Secure Hash Algorithm(安全雜湊演算法)
sha是美國國家標準與技術研究院與美國國家安全域性設計,從94年以來被廣泛使用的加密演算法.sha系列中的sha1, sha224, sha2556適用於長度不超過2^64二進位制位的訊息。sha384和sha512適用於長度不超過2^128二進位制位的訊息。不過,這個也不太安全.2005年的時候國內王小云教授及其團隊在sha1演算法的破譯上就已經取得了很大的成就.今年穀歌已經攻破了sha1演算法.另外,Matthew Green(https://twitter.com/matthew_d_green)在這一領域也有不錯的成就.
import hashlib #例項化sha1物件 hs3 = hashlib.sha1() #去將要去加密的資料通過一個方法放入物件中 hs3.update('123123'.encode()) #呼叫物件中的方法,計算並輸出加密後的40位的雜湊值 hsvar = hs3.hexdigest()
sha演算法常用的有 sha1 sha512等,語法一樣,只不過輸出的雜湊值的長度不一樣,所以就不一一列舉了