標籤:長度 md5演算法 模組 enc 也有 進位 失效 class 計算
hashlib模組
hashlib是一個提供字元加密功能的模組,包含MD5和SHA的密碼編譯演算法,具體支援md5,sha1, sha224, sha256, sha384, sha512等演算法。 該模組在使用者登入認證方面應用廣泛,對文本加密也很常見。模組調用很簡單,那麼就讓我們一起來看看。。
基本調用:
1 import hashlib2 new_md5 = hashlib.md5() #建立hashlib的md5對象3 new_md5.update(‘字串‘) #將字串載入到md5對象中,獲得md5演算法加密。4 print(new_md5.hexdigest()) #通過hexdigest()方法,獲得new_md5對象的16進位md5顯示。
簡單來說。就是三步:
1,建立加密對象。2,對字串進行演算法加密。3,獲得16進位顯示
可以建立的密碼編譯演算法有:md5,sha1, sha224, sha256, sha384, sha512
1 例:2 new_md5 = hashlib.md5() 3 new_sha1 = hashlib.sha1() 4 new_sha256 = hashlib.sha256()
簡單調用:
1 new_md5 = hashlib.new(‘md5‘,b‘字串‘).hexdigest()
注意:向對象中傳入字串時,必須為編碼類別型。可以使用字串前b‘ ‘的方法或使用.encode(‘UTF-8‘)的方法,使字串變為bytes類型。
下面我們將引入一個簡單的實力來說明最常用的MD5演算法在實際中的應用。在引入實力前,讓我們先對MD5的基本特性有個認識。
md5演算法的特點:
- 壓縮性:任意長度的資料,算出的MD5值的長度都是固定的。
- 容易計算:從原資料計算出的MD5值很容易。不管資料多大,很快就能算出一串MD5字串來。
- 抗修改性:對原資料進行任何改動,哪怕修改任何一個位元組,產生的MD5值也有會很大的區別。
- 強抗碰撞:已知原資料和MD5,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。
好啦,那我們已經知道了MD5演算法的特點。那麼問題來了,MD5既然每次產生的值都是固定的。那麼雖然是單向產生不可反推,但是如果通過碰撞方法對字串產生MD5後與MD5值碰撞,是不是就會得到MD5對應的字串了呢?答對了!這樣是可以的,換句話說,如果某使用者資料庫泄露了,拿到了密碼庫中的MD5就能通過碰撞的方法將密碼破解出來。那麼問題又來了,既然這樣,那也沒有什麼用了啊。。非也,讓我們用一個小小的技巧,讓這個碰撞方法失效。這個方法就是“加鹽”,什麼是加鹽呢?
“加鹽”就是對原密碼添加額外的字串,然後再產生MD5值,這樣就沒有辦法進行破解了,除非拿到“加鹽”字串,但碰撞方法也是需要一個一個重新計算MD5值後再進行碰撞對比的,難度也是極其大的。那麼看下面的代碼吧:
例:MD5密碼認證,帶“加鹽”方法
1 import hashlib2 3 yan = ‘!任#意%字^符@‘ #定義加鹽字串4 pwd = input(‘>>>‘)5 6 md5_pwd = hashlib.md5()7 md5_pwd.update((pwd+yan).encode(‘UTF-8‘)) #加鹽8 pwd = md5_pwd.hexdigest()9 #pwd = hashlib.new(‘md5‘,(pwd+yan).encode(‘UTF-8‘)).hexdigest() #也可以這樣簡寫哦。。一句話搞定。
栗子是簡寫的,不過營養在,好吃不難。
Python hashlib模組