您好,登錄后才能下訂單哦!
小編給大家分享一下python中密碼加鹽的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
給密碼加密是什么:用戶注冊的密碼一般網站管理人員會利用md5方法加密,這種加密方法的好處是它是單向加密的,也就是說,你只有在提前知道某一串密碼對應的md5加密碼,才能反推出密碼是多少,雖然有極小的幾率可能造成兩個密碼加密之后的值相等(這種現象稱為碰撞),不過基本上不用擔心,因為概率是極低的。在常用的hashlib模塊里還有sha1()等方法,它的本質和md5是一致的,只是產生的結果是160 bit字節(jié),通常用一個40位的16進制字符串表示。而md5是最常見的加密算法,生成速度很快,生成結果是固定的128 bit字節(jié),通常用一個32位的16進制字符串表示。
給密碼加鹽是什么:見上面提到的,下面內容摘自百度百科,是對彩虹表的大概定義和解釋,出于預先防止黑客利用彩虹表反推盜用用戶的密碼賬戶信息,就需要給密碼加‘鹽',其實簡單來說,就是在hashlib模塊中的md5加密方法時,傳入一個你自己想給的鹽,或者干脆隨機生成(比較安全,將鹽封裝在類中)。
彩虹表是一個用于加密散列函數逆運算的預先計算好的表, 為破解密碼的散列值(或稱哈希值、微縮圖、摘要、指紋、哈希密文)而準備。一般主流的彩虹表都在100G以上。 這樣的表常常用于恢復由有限集字符組成的固定長度的純文本密碼。
md5和sha1加密介紹
import hashlib md5=hashlib.md5() md5.update('this is an example'.encode('utf-8')) md5.update('again'.encode('utf-8')) #這里要記得update()方法可以多次調用,可以自己試一試。 print(md5.hexdigest())
#承接上面 sha1=hashlib.sha1() sha1.update('this is an example'.encode('utf-8')) sha1.update('...'.encode('utf-8')) print(sha1.hexdigest())
下面利用md5加密和加鹽的方法,實現簡單的用戶注冊,將信息儲存在字典中,然后模擬登陸。
#!/usr/bin/python3 #-*-coding:UTF-8-*- import hashlib,random #注冊 storage={} def registration(u,p): if u in storage: return 'username occupied.please choose another username...' else: storage[u]=Users(u,p) #加密方法 def get_md5(s): return hashlib.md5(s.encode('utf-8')).hexdigest() #登陸 class Users(object): def __init__(self,username,password): self.username=username #!!!!!!!注意鹽是隨機給的,每注冊一個賬號給一次鹽,封裝在Users類里面,在login函數里比較相等時, # a.salt是注冊時封裝好的鹽,這時是固定的鹽,所以只要賬號密碼對了就可以了。 self.salt=''.join([chr(random.randint(48,122)) for i in range(20)]) self.password=get_md5(password+self.salt) def login(user,pw): if user not in storage.keys(): return 'wrong username' else: a=storage[user] if a.password==get_md5(pw+a.salt): return 'succeeded' else: return 'wrong password' registration('mary','12345') registration('bob','aa895') registration('kirk','ba155') print(storage) print(login('mary','12345'))
最重要是理解每一次的鹽都封裝好了,在login函數中,只要用戶輸入的密碼+封裝好的鹽正確,即可實現登陸
以上是“python中密碼加鹽的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。