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值來獲得原始數據,固然這種網站也有, 我百度上看到的一個網站,大家能夠進去看一看,通常的哈希值都能查詢到原數據,只要他們數據庫中有的話.spa
因此說最好的方法就是咱們要加鹽,去加入複雜混餚參數,這樣的話大大提升了數據加密的安全性設計
連接: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是美國國家標準與技術研究院與美國國家安全局設計,從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等,語法同樣,只不過輸出的哈希值的長度不同,因此就不一一列舉了