本篇文章給大家分享的是有關(guān)Python中hashlib模塊的作用是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
潁東網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
一:hashlib簡介
1、什么叫hash: hash是一種算法(不同的hash算法只是復雜度不一樣)(3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),該算法接受傳入的內(nèi)容,經(jīng)過運算得到一串hash值
2、hash值的特點是(hash值/產(chǎn)品有三大特性:):
2.1、只要傳入的內(nèi)容一樣,得到的hash值必然一樣=====>要用明文傳輸密碼文件完整性校驗
2.2、不能由hash值返解成內(nèi)容=======》把密碼做成hash值,不應該在網(wǎng)絡傳輸明文密碼(只能有內(nèi)容返回hash值)
2.3、只要使用的hash算法不變,無論校驗的內(nèi)容有多大,得到的hash值長度是固定的(如從網(wǎng)上下載文件要進行hash校驗,保證網(wǎng)絡傳輸沒有丟包)
基于2.1和2.3可以做文件下載一致性的校驗
基于2.1和2.2可以對用戶密碼進行加密
hash算法就像一座工廠,工廠接收你送來的原材料(可以用m.update()
為工廠運送原材料),經(jīng)過加工返回的產(chǎn)品就是hash值
PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領(lǐng)取

1)在進行md5哈希運算前,需要對數(shù)據(jù)進行編碼,否則報錯
import hashlib
obj = hashlib.md5() #構(gòu)造一個hashlib的對象
obj.update("小馬過河") #update對指定字符串進行加密
print(obj)
--------------結(jié)果:
obj.update("小馬過河")
TypeError: Unicode-objects must be encoded before hashing2)obj是hash對象
import hashlib
obj = hashlib.md5()
obj.update("小馬過河".encode("utf-8"))
print(obj,type(obj))
-------------------結(jié)果:
<md5 HASH object @ 0x001C5590> <class '_hashlib.HASH'>3)
import hashlib
obj = hashlib.md5()
obj.update("小馬過河".encode("utf-8"))
result=obj.hexdigest()
print(result)
--------------結(jié)果:
24f67b0f6d02adc8867d612e0e0fc40a4)給加密增添難度
import hashlib
obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8")) #添加一些內(nèi)容,提高加密復雜度。此處的字符串也要先編碼,
obj.update("小馬過河".encode('utf-8'))
result = obj.hexdigest()
print(result)
-------------------結(jié)果:
b11740508f28e04837f2c0e3a58cf9905)用hashlib做成加密函數(shù)(添加基礎(chǔ)的字符了的)
import hashlib
def get_md5(data): #傳參為需要加密的字符串
obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
obj.update(data.encode('utf-8'))
result = obj.hexdigest()
return result
val = get_md5('123')
print(val)
--------------結(jié)果:
35093270b6352fa9721370b781f7b4d7import hashlib
USER_LIST = []
def get_md5(data):
obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
obj.update(data.encode('utf-8'))
result = obj.hexdigest()
return result
def register():
print('**************用戶注冊**************')
while True:
user = input('請輸入用戶名:')
if user == 'N':
return
pwd = input('請輸入密碼:')
temp = {'username':user,'password':get_md5(pwd)}
USER_LIST.append(temp)
def login():
print('**************用戶登陸**************')
user = input('請輸入用戶名:')
pwd = input('請輸入密碼:')
for item in USER_LIST:
if item['username'] == user and item['password'] == get_md5(pwd):
return True
register()
result = login()
if result:
print('登陸成功')
else:
print('登陸失敗')
------------------------結(jié)果:
**************用戶注冊**************
請輸入用戶名:小馬過河
請輸入密碼:123456
請輸入用戶名:N
**************用戶登陸**************
請輸入用戶名:小馬過河
請輸入密碼:123456
登陸成功代碼分析:
四、校驗文件的一致性(如何保證下載的文件過程中不丟包,保證下載數(shù)據(jù)的完整性)
# -----------文件一致校驗---------------- '''可以拷貝一個文件放在兩個不同的盤中,然后通過判斷兩個文件的hash值是否相等,判斷兩個文件是否是同一個文件''' import hashlib m = hashlib.md5() with open(r'G:/logging模塊配圖.png','rb') as f: for line in f: m.update(line) print(m.hexdigest()) #47a6b079cc33a4f312786b46e61e0305 import hashlib m = hashlib.md5() with open(r'H:/logging模塊配圖.png','rb') as f: for line in f: m.update(line) print(m.hexdigest())
五、對明文密碼進行加密
# 應用:對明文密碼進行加密(暴力破解-------用明文密碼用一種算法算出一個hash值,與截取的hash值進行比對,比對成功說明明文密碼一致,就可以破解用戶的密碼)
'''如用戶在某網(wǎng)站進行注冊信息,這個時候防止信息被惡意攔截獲取,可以對用戶明文密碼進行加密,存成hash值得形式,這樣用戶每次登陸雖然輸?shù)氖敲魑拿艽a,校驗hash值即可'''
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update(password.encode('utf-8'))
print(m.hexdigest()) #00dcbdaede875d5e23f1f9f64c7849ef
# 對密碼進行加鹽(暗號)----------進一步加強密碼的安全性
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update('一行白鷺上青天'.encode('utf-8')) #對密碼加鹽
m.update(password.encode('utf-8'))六、破解用戶注冊的密碼
# 重點
'''模擬撞庫破解密碼'''
import hashlib
passwds=[ #可以通過random實現(xiàn)對passwds中的內(nèi)容
'alex3714',
'alex1313',
'alex94139413',
'alex123456',
'123456alex',
'a123lex',
]
def make_passwd_dic(passwds): #通過明文密碼列表,造出與之對應的hash值得字典
dic={}
for passwd in passwds:
m=hashlib.md5() #使用md5算法,造了一個工廠
m.update(passwd.encode('utf-8')) #給工廠運送原材料(即我們要加密的內(nèi)容)
dic[passwd]=m.hexdigest() #產(chǎn)出hash值(即最終的產(chǎn)品),將其加入到我們事先造好的空字典中,字典形式:{密碼:hash值}
return dic
def break_code(cryptograph,passwd_dic): #判斷攔截的hash值是否與字典中事先造好的hash值相等,相等則說明成功進行破解
for k,v in passwd_dic.items():
if v == cryptograph:
print('密碼是===>\033[46m%s\033[0m' %k)
cryptograph='aee949757a2e698417463d47acac93df' #我們攔截拿到的密碼,經(jīng)過加密的hash值
break_code(cryptograph,make_passwd_dic(passwds)) #將要破解的密碼hash值,和事先造好的hash的字典當做函數(shù)的實參傳給對應的形參七、hmac模塊的加密方式,與hashlib類似
'''python 還有一個 hmac 模塊,它內(nèi)部對我們創(chuàng)建 key 和 內(nèi)容 進行進一步的處理然后再加密:'''
import hmac
h = hmac.new('天王蓋地虎'.encode('utf8')) #hmac必須要加鹽
h.update('hello'.encode('utf8'))
print(h.hexdigest()) #1abaae8f65f68f2695a8545c5bc8e738
#要想保證hmac最終結(jié)果一致,必須保證:
#1:hmac.new括號內(nèi)指定的初始key一樣
#2:無論update多少次,校驗的內(nèi)容累加到一起是一樣的內(nèi)容
# 下面單重方式得到的結(jié)果是一樣的
import hmac
h2=hmac.new(b'tom') #初始值必須保證一致,最終得到的結(jié)果就會不一樣
h2.update(b'hello')
h2.update(b'world')
print(h2.hexdigest())
h3=hmac.new(b'tom') #初始值必須保證一致,最終得到的結(jié)果就會不一樣
h3.update(b'helloworld')
print(h3.hexdigest())
h4=hmac.new(b'tomhelloworld') #初始值不一樣,所以與上面兩種的結(jié)果不一樣
print(h4.hexdigest())
'''
0426ccec3b134e8c18fdcefee841ef25
0426ccec3b134e8c18fdcefee841ef25
ff1214d895bbaf5f1847db4ebae8212e
'''以上就是Python中hashlib模塊的作用是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章標題:Python中hashlib模塊的作用是什么
網(wǎng)站鏈接:http://chinadenli.net/article6/ipsoig.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、網(wǎng)頁設計公司、營銷型網(wǎng)站建設、企業(yè)建站、微信公眾號、品牌網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)