1. 程式人生 > >md5資訊摘要演算法

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!')
在學習的過程中遇到了md5摘要演算法,看過了一遍這次從新理解,感覺清楚了一些,但是演算法具體實現細節我就不講了,免得誤人子弟,這裡有連結,要看具體實現方法的話可以看看這位仁兄的部落格點選開啟連結