md5資訊摘要演算法
阿新 • • 發佈:2019-02-16
在學習的過程中遇到了md5摘要演算法,看過了一遍這次從新理解,感覺清楚了一些,但是演算法具體實現細節我就不講了,免得誤人子弟,這裡有連結,要看具體實現方法的話可以看看這位仁兄的部落格點選開啟連結# -*- coding: utf-8 -*- # @Author: Clarence # @Date: 2018-01-12 21:04:39 # @Last Modified by: Clarence # @Last Modified time: 2018-01-12 21:17:59 """ md5摘要演算法 Message Digest Algorithm MD5 (訊息摘要演算法第五版) 為電腦保安領域廣泛使用的一種雜湊函式, 用以提供訊息的完整性保護 摘要演算法又稱雜湊演算法、雜湊演算法、它通過一個函式,把任意長度的資料轉換成一個長度固定的資料串(通過用16進位制的字串表示). 摘要演算法就是通過摘要函式f()對任意長度的資料data計算出固定長度的摘要digest,目的是為了發現原始資料是否被人篡改過(不同的data計算機出來的摘要不同) 演算法特點: MD5演算法,符合一般摘要演算法的特點: 1.壓縮性:任意長度的資料,算出的MD5值長度都是固定的 2.容易計算:從原資料計算出MD5值很容易 3.抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大的區別 4.強抗碰撞:已經原資料和其MD5值,想要找到一個具有相同MD5值的資料(即偽造資料)是非常困難的 生成結果是固定的128位,通常用一個32位的16進位制字串表示 import hashlib m = hashlib.md5() m.update("zhangkang") print(m.hexdigest()) 輸出: 09b32682a49db34d3c9d7e6d97f85a4a 摘要演算法的應用 假如我們有一個網站,資料庫中儲存著使用者名稱和密碼資訊,假設資料庫中的使用者密碼都是明文,那麼一旦資料庫洩露,那麼所有使用者的密碼就會顯而易見。這樣有可能 導致使用者的資訊洩露,而正確儲存使用者密碼的方式是不儲存明文密碼,而是儲存密碼的MD5值。當用戶登入的時候,先計算密碼的MD5值,然後再和資料庫中的比較。 為了更加安全的保護使用者的密碼資訊,在計算密碼的MD5值得時候,建議連同使用者名稱,密碼,或者其他固定字串都一併update(),也就是俗稱的"加鹽" """ #模擬使用者登入 import hashlib db = { 'zhangkang' : '25c25c67943e82a116ec8c32218a5068' } #明文密碼是: zhangkang123456 def login(username, password): m = hashlib.md5() m.update((username+password+'the-salt').encode('utf-8')) passwd = m.hexdigest() if username not in db: return False if passwd != db[username]: return False else : return True while True: username = input('Input username:') password = input('Input password:') if(login(username, password)): print('Login success!') break else: print('login failed!')