摘要算法又稱為哈希算法,散列算法。它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串(通常用16進制的字符串表示)用于加密相關的操作。
圖解MD5: https://mp.weixin.qq.com/s/n7OnxPwslilW8nSBjQ719A
1.Python3實現(xiàn)MD5
import hashlib
def get_md5(str1):
m = hashlib.md5()
m.update(str1.encode('utf-8'))
return m.hexdigest()
if __name__ == '__main__':
print(get_md5('password'))
hashlib提供主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
以上加密算法雖然很厲害,但仍然存在缺陷,通過撞庫可以反解。所以必要對加密算法中添加自定義key再來做加密.其實加鹽是為了應對這么一種情況:如果兩個人或多個人的密碼相同,那么通過相同的加密算法得到的是相同的結(jié)果。這樣會造成哪些后果呢?首先,破解一個就有可能是相當于破一片密碼。而且加入小明這個用戶可以查看后臺數(shù)據(jù)庫,那么如果他觀察到小紅這個用戶的密碼跟自己的密碼是一樣的(雖然都是密文),那么,也就代表他們兩個人的密碼是相同的。所以他就可以用小紅的身份進行登錄了。
其實,我們只要稍微混淆一下就能防范住了,這在加密術語中稱為“加鹽”。具體來說就是在原有材料(用戶自定義密碼)中加入其他成分(一般是用戶自有且不變的因素),以此來增加系統(tǒng)復雜度。當這種鹽和用戶密碼結(jié)合后,再通過摘要處理,就能得到隱蔽性更強的摘要值。
import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update('password'.encode('utf-8'))
print(hash.hexdigest())
2.SHA1
import hashlib
def get_sha1(str1):
m = hashlib.sha1()
m.update(str1.encode('utf-8'))
return m.hexdigest()
if __name__ == '__main__':
print(get_sha1('password'))
3.獲取文件md5值
import hashlib
import os
def md5sum(filename):
"""
用于獲取文件的md5值
:param filename: 文件名
:return: MD5碼
"""
if not os.path.isfile(filename): # 如果校驗md5的文件不是文件,返回空
return
myhash = hashlib.md5()
f = open(filename, 'rb')
while True:
b = f.read(8096)
if not b:
break
myhash.update(b)
f.close()
return myhash.hexdigest()
print(md5sum('filepath'))