Python hashlib模塊


hashlib模塊

hashlib是一個提供字符加密功能的模塊,包含MD5和SHA的加密算法,具體支持md5,sha1, sha224, sha256, sha384, sha512等算法。 該模塊在用戶登錄認證方面應用廣泛,對文本加密也很常見。模塊調用很簡單,那么就讓我們一起來看看。。

基本調用:

1 import hashlib
2 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()
2 #或者
3 new_md5 = hashlib.md5(str(time.time().encode('utf-8')).hexdigest()

 

注意:向對象中傳入字符串時,必須為編碼類型。可以使用字符串前b' '的方法或使用.encode('UTF-8')的方法,使字符串變為bytes類型。

下面我們將引入一個簡單的實力來說明最常用的MD5算法在實際中的應用。在引入實力前,讓我們先對MD5的基本特性有個認識。

md5算法的特點:

  1. 壓縮性:任意長度的數據,算出的MD5值的長度都是固定的。
  2. 容易計算:從原數據計算出的MD5值很容易。不管數據多大,很快就能算出一串MD5字符串來。
  3. 抗修改性:對原數據進行任何改動,哪怕修改任何一個字節,生成的MD5值也有會很大的區別。
  4. 強抗碰撞:已知原數據和MD5,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

好啦,那我們已經知道了MD5算法的特點。那么問題來了,MD5既然每次生成的值都是固定的。那么雖然是單向生成不可反推,但是如果通過碰撞方法對字符串生成MD5后與MD5值碰撞,是不是就會得到MD5對應的字符串了呢?答對了!這樣是可以的,換句話說,如果某用戶數據庫泄露了,拿到了密碼庫中的MD5就能通過碰撞的方法將密碼破解出來。那么問題又來了,既然這樣,那也沒有什么用了啊。。非也,讓我們用一個小小的技巧,讓這個碰撞方法失效。這個方法就是“加鹽”,什么是加鹽呢?

“加鹽”就是對原密碼添加額外的字符串,然后再生成MD5值,這樣就沒有辦法進行破解了,除非拿到“加鹽”字符串,但碰撞方法也是需要一個一個重新計算MD5值后再進行碰撞對比的,難度也是極其大的。那么看下面的代碼吧:

例:MD5密碼認證,帶“加鹽”方法

1 import hashlib
2 
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()   #也可以這樣簡寫哦。。一句話搞定。

 

栗子是簡寫的,不過營養在,好吃不難。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM