詳解python中的hashlib模塊的使用
hashlib
hashlib主要提供字符加密功能,將md5和sha模塊整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法
hashlib模塊
#哈希算法也叫摘要算法,相同的數(shù)據(jù)始終得到相同的輸出,不同的數(shù)據(jù)得到不同的輸出。
#(1)哈希將不可變的任意長(zhǎng)度的數(shù)據(jù),變成具有固定長(zhǎng)度的唯一值
#(2)字典的鍵值對(duì)映射關(guān)系是通過(guò)哈希計(jì)算的,哈希存儲(chǔ)的數(shù)據(jù)是散列(無(wú)序)
# 應(yīng)用場(chǎng)景:在需要效驗(yàn)功能時(shí)使用
用戶(hù)密碼的 => 加密,解密
相關(guān)效驗(yàn)的 => 加密,解密
hashlib中的MD5算法
# 第一步是引包
import hashlib
# 創(chuàng)建一個(gè)md5算法的對(duì)象
hs = hashlib.md5()
# print(hs)
# update中的 參數(shù)必須是二進(jìn)制字節(jié)流
hs.update("123".encode())
## hexdigest 返回32位十六進(jìn)制的字符串(固定長(zhǎng)度)
## 用一個(gè)hsvar來(lái)接收經(jīng)過(guò)哈希算法返回的值
hsvar = hs.hexdigest()
#加鹽 (就是在簡(jiǎn)單的算法中進(jìn)行加入混肴參數(shù))
語(yǔ)法格式如下:
#首先在實(shí)例化hashlib中的MD5對(duì)象的時(shí)候,加入混淆參數(shù)key,以此達(dá)到更加復(fù)雜的加密)
#加入的key參數(shù)一定也要是字節(jié)流
hs2 = hashlib.md5("abcd".encode())
hs2.update("123123".encode())
hs2var = hs2.hexdigest()
加鹽后的好處就是,增加了加密的安全性,使其不那么容易被破解
但因?yàn)閔ash算法是被公開(kāi)的算法,其安全性不那么好,一些簡(jiǎn)單的加密 值很容易被逆向破解出來(lái),說(shuō)逆向破解也不那么準(zhǔn)確,
一般來(lái)說(shuō),破解此類(lèi)算法只能使用窮舉法, 可以將 跑出來(lái)的值存入到一個(gè)大的數(shù)據(jù)庫(kù)中,哈希算法得出的值有唯一性,所以可以反向查詢(xún)已有的hash值來(lái)得到原始數(shù)據(jù),當(dāng)然這種網(wǎng)站也有, 我百度上看到的一個(gè)網(wǎng)站,你們可以進(jìn)去看一看,一般的哈希值都能查詢(xún)到原數(shù)據(jù),只要他們數(shù)據(jù)庫(kù)中有的話(huà).
所以說(shuō)最好的方法就是我們要加鹽,去加入復(fù)雜混肴參數(shù),這樣的話(huà)大大提高了數(shù)據(jù)加密的安全性
鏈接: https://www.cmd5.com/ md5解密(本鏈接只作為學(xué)習(xí)使用,勿將其使用到任何非法用途)
在開(kāi)發(fā)編程中,常用到hash算法的方面應(yīng)該有用戶(hù)的注冊(cè)登錄
下面有我寫(xiě)的一個(gè)實(shí)例,供大家參考(為了方便大家的閱讀,這個(gè)注冊(cè)登錄功能我沒(méi)有完善,比如說(shuō)用正則去卡用戶(hù)名和密碼的格式等等,)
import hashlib
#定義一個(gè)加密函數(shù),將傳入的參數(shù)轉(zhuǎn)換成32位的哈希值并返回
def md5(pwd):
md5_password = hashlib.md5("abd".encode())
md5_password.update(pwd.encode())
return md5_password.hexdigest()
#定義一個(gè)登錄函數(shù),將傳入的賬號(hào)密碼與本地密碼文件進(jìn)行匹配,如果匹配到返回True
def login(user,pwd):
with open("database","r",encoding="utf-8") as fp:
for line in fp :
u,p = line.strip().split("|")
if u == user and p == md5(pwd):
return True
#定義一個(gè)注冊(cè)的函數(shù),將用戶(hù)傳入的賬號(hào)密碼寫(xiě)入到本地的密碼文件中
def register(user,pwd):
with open("database","w",encoding="utf-8") as fp:
temp = user+ "|" + md5(pwd)
fp.write(temp)
#index菜單,給用戶(hù)的交互
choice = input("1表示登錄, 2表示注冊(cè):").strip()
if choice == "2":
user = input("用戶(hù)名:")
pwd = input("密碼:")
register(user,pwd)
elif choice == "1":
user = input("用戶(hù)名:")
pwd = input("密碼:")
r = login(user,pwd)
if r == True:
print("登錄成功")
else:
print("登錄失敗")
else:
print("賬號(hào)不存在")
hashlib中的sha算法
•# sha 加密效率低,算法精密,安全性高
•sha: Secure Hash Algorithm(安全哈希算法)
sha是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院與美國(guó)國(guó)家安全局設(shè)計(jì),從94年以來(lái)被廣泛使用的加密算法.sha系列中的sha1, sha224, sha2556適用于長(zhǎng)度不超過(guò)2^64二進(jìn)制位的消息。sha384和sha512適用于長(zhǎng)度不超過(guò)2^128二進(jìn)制位的消息。不過(guò),這個(gè)也不太安全.2005年的時(shí)候國(guó)內(nèi)王小云教授及其團(tuán)隊(duì)在sha1算法的破譯上就已經(jīng)取得了很大的成就.今年谷歌已經(jīng)攻破了sha1算法.另外,Matthew Green(https://twitter.com/matthew_d_green)在這一領(lǐng)域也有不錯(cuò)的成就.
import hashlib
#實(shí)例化sha1對(duì)象
hs3 = hashlib.sha1()
#去將要去加密的數(shù)據(jù)通過(guò)一個(gè)方法放入對(duì)象中
hs3.update('123123'.encode())
#調(diào)用對(duì)象中的方法,計(jì)算并輸出加密后的40位的哈希值
hsvar = hs3.hexdigest()
sha算法常用的有 sha1 sha512等,語(yǔ)法一樣,只不過(guò)輸出的哈希值的長(zhǎng)度不一樣,所以就不一一列舉了
總結(jié)
以上所述是小編給大家介紹的python中的hashlib模塊的使用,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- 盤(pán)點(diǎn)Python加密解密模塊hashlib的7種加密算法(推薦)
- Python hashlib和hmac模塊使用方法解析
- Python hashlib模塊的使用示例
- Python字符串hashlib加密模塊使用案例
- Python加密模塊的hashlib,hmac模塊使用解析
- Python hashlib模塊實(shí)例使用詳解
- Python hashlib加密模塊常用方法解析
- python模塊hashlib(加密服務(wù))知識(shí)點(diǎn)講解
- Python hashlib模塊加密過(guò)程解析
- Python3.5內(nèi)置模塊之shelve模塊、xml模塊、configparser模塊、hashlib、hmac模塊用法分析
- Python基礎(chǔ)之hashlib模塊詳解
相關(guān)文章
pytorch實(shí)現(xiàn)圖像識(shí)別(實(shí)戰(zhàn))
這篇文章主要介紹了pytorch實(shí)現(xiàn)圖像識(shí)別(實(shí)戰(zhàn)),文章主要分享實(shí)現(xiàn)代碼,但也具有一定的參考價(jià)值,需要的小伙伴可以才可以一下,希望對(duì)你有所幫助2022-02-02
PyQt5+requests實(shí)現(xiàn)車(chē)票查詢(xún)工具
這篇文章主要為大家詳細(xì)介紹了PyQt5+requests實(shí)現(xiàn)車(chē)票查詢(xún)工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
python實(shí)現(xiàn)獲取客戶(hù)機(jī)上指定文件并傳輸?shù)椒?wù)器的方法
這篇文章主要介紹了python實(shí)現(xiàn)獲取客戶(hù)機(jī)上指定文件并傳輸?shù)椒?wù)器的方法,涉及Python實(shí)現(xiàn)C/S架構(gòu)程序與socket程序的使用技巧,需要的朋友可以參考下2015-03-03
詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本
這篇文章主要介紹了詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python基礎(chǔ)篇之初識(shí)Python必看攻略
下面小編就為大家?guī)?lái)一篇Python基礎(chǔ)篇之初識(shí)Python必看攻略。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
python機(jī)器學(xué)習(xí)理論與實(shí)戰(zhàn)(六)支持向量機(jī)
這篇文章主要介紹了python機(jī)器學(xué)習(xí)理論與實(shí)戰(zhàn)第六篇,支持向量機(jī)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python 實(shí)現(xiàn)提取log文件中的關(guān)鍵句子,并進(jìn)行統(tǒng)計(jì)分析
今天小編就為大家分享一篇python 實(shí)現(xiàn)提取log文件中的關(guān)鍵句子,并進(jìn)行統(tǒng)計(jì)分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
關(guān)于keras中keras.layers.merge的用法說(shuō)明
這篇文章主要介紹了關(guān)于keras中keras.layers.merge的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

