摘要算法又稱為哈希算法,散列算法讼育。它通過一個(gè)函數(shù)叠艳,把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)用于加密相關(guān)的操作。
圖解MD5: https://mp.weixin.qq.com/s/n7OnxPwslilW8nSBjQ719A
1.Python3實(shí)現(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算法
以上加密算法雖然很厲害碉怔,但仍然存在缺陷烘贴,通過撞庫可以反解。所以必要對(duì)加密算法中添加自定義key再來做加密.其實(shí)加鹽是為了應(yīng)對(duì)這么一種情況:如果兩個(gè)人或多個(gè)人的密碼相同撮胧,那么通過相同的加密算法得到的是相同的結(jié)果桨踪。這樣會(huì)造成哪些后果呢?首先芹啥,破解一個(gè)就有可能是相當(dāng)于破一片密碼锻离。而且加入小明這個(gè)用戶可以查看后臺(tái)數(shù)據(jù)庫,那么如果他觀察到小紅這個(gè)用戶的密碼跟自己的密碼是一樣的(雖然都是密文)墓怀,那么汽纠,也就代表他們兩個(gè)人的密碼是相同的。所以他就可以用小紅的身份進(jìn)行登錄了傀履。
其實(shí)虱朵,我們只要稍微混淆一下就能防范住了,這在加密術(shù)語中稱為“加鹽”钓账。具體來說就是在原有材料(用戶自定義密碼)中加入其他成分(一般是用戶自有且不變的因素)碴犬,以此來增加系統(tǒng)復(fù)雜度。當(dāng)這種鹽和用戶密碼結(jié)合后梆暮,再通過摘要處理服协,就能得到隱蔽性更強(qiáng)的摘要值。
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): # 如果校驗(yàn)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'))