(十九)hashlib模块
hashlib模塊用于加密相關(guān)的操作,3.x里代替了md5模塊和sha模塊,主要提供?SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
注意:md5和sha256算法都是單向加密,即明文加密為密文后,密文無(wú)法再解密回明文
適合應(yīng)用場(chǎng)景:用戶(hù)的密碼需要加密后才能入庫(kù)
import hashlib m = hashlib.md5() #使用md5算法,沒(méi)有加鹽;如果是sha256算法:hashlib.sha256() m.update('hello'.encode('utf8')) #對(duì)'hello'加密 print(m.hexdigest()) #打印加密后的密文m1 = hashlib.md5() m1.update('hello'.encode('utf8')) print(m1.hexdigest())結(jié)果:
5d41402abc4b2a76b9719d911017c592
5d41402abc4b2a76b9719d911017c592
可見(jiàn),通過(guò)這種方式,一個(gè)不定長(zhǎng)的字符串可以加密變?yōu)橐粋€(gè)定長(zhǎng)的密文,而這個(gè)明文和密文永遠(yuǎn)是一一對(duì)應(yīng)的關(guān)系,即'hello'通過(guò)md5加密后的密文一定是5d41402abc4b2a76b9719d911017c592
有人把這種一一對(duì)應(yīng)的關(guān)系收集記錄(特別是常用的字符串),放入一個(gè)數(shù)據(jù)庫(kù),通過(guò)撞庫(kù)就可以解密MD5,比如我們常用的https://www.cmd5.com/
所以有必要對(duì)加密算法中添加自定義key再來(lái)做加密,即加鹽
m = hashlib.md5('nba'.encode('utf8')) #'nba'就是加鹽,沒(méi)有加鹽的時(shí)候hashlib.md5()方法不帶參數(shù) m.update('hello'.encode('utf8')) print(m.hexdigest())結(jié)果:444d0cc8a2d942f881bc85f5a31eced0
用上面這個(gè)密文結(jié)果去https://www.cmd5.com/解密是無(wú)法得到明文的
?需要注意的是,同一個(gè)hashlib對(duì)象的加密是連續(xù)疊加的:
m = hashlib.md5() m.update('hello'.encode('utf8')) #m對(duì)象先對(duì)'hello'加密 print(m.hexdigest()) #這個(gè)密文是'hello'的 m.update('nick'.encode('utf8')) #m對(duì)象再對(duì)'nick'加密 print(m.hexdigest()) #這個(gè)密文不是'nick'的,而是'hellonick'的m2 = hashlib.md5() m2.update('hellonick'.encode('utf8')) print(m2.hexdigest())結(jié)果:
5d41402abc4b2a76b9719d911017c592
d29690d65b7fdc3308b016f7a26cde94
d29690d65b7fdc3308b016f7a26cde94
?
轉(zhuǎn)載于:https://www.cnblogs.com/xulan0922/p/10312171.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的(十九)hashlib模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 贝叶斯网络
- 下一篇: java篇 之 变量存放位置