最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python算法模塊之hashlib模塊詳解

 更新時(shí)間:2023年08月11日 10:14:05   作者:松鼠愛吃餅干  
這篇文章主要介紹了Python算法模塊之hashlib模塊詳解,hash是一種算法,不同的hash算法只是復(fù)雜度不一樣,該算法接受傳入的內(nèi)容,經(jīng)過運(yùn)算得到一串hash值,本文提供了部分實(shí)例代碼方便理解,需要的朋友可以參考下

一:hashlib簡(jiǎn)介

什么叫hash

hash是一種算法(不同的hash算法只是復(fù)雜度不一樣)

3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

該算法接受傳入的內(nèi)容,經(jīng)過運(yùn)算得到一串hash值

hash值的特點(diǎn)

hash值/產(chǎn)品有三大特性:

  1. 只要傳入的內(nèi)容一樣,得到的hash值必然一樣=====>要用明文傳輸密碼文件完整性校驗(yàn)
  2. 不能由hash值返解成內(nèi)容=======》把密碼做成hash值,不應(yīng)該在網(wǎng)絡(luò)傳輸明文密碼(只能有內(nèi)容返回hash值)
  3. 只要使用的hash算法不變,無(wú)論校驗(yàn)的內(nèi)容有多大,得到的hash值長(zhǎng)度是固定的(如從網(wǎng)上下載文件要進(jìn)行hash校驗(yàn),保證網(wǎng)絡(luò)傳輸沒有丟包)

基于1和3可以做文件下載一致性的校驗(yàn)

基于1和2可以對(duì)用戶密碼進(jìn)行加密

hash算法就像一座工廠,工廠接收你送來(lái)的原材料(可以用m.update()為工廠運(yùn)送原材料),經(jīng)過加工返回的產(chǎn)品就是hash值

二:將指定的字符串進(jìn)行加密

使用hashlib的分步解析

1)在進(jìn)行md5哈希運(yùn)算前,需要對(duì)數(shù)據(jù)進(jìn)行編碼,否則報(bào)錯(cuò)

import hashlib
obj = hashlib.md5()   #構(gòu)造一個(gè)hashlib的對(duì)象
obj.update("小馬過河")  #update對(duì)指定字符串進(jìn)行加密
print(obj)           
#結(jié)果:
  obj.update("小馬過河")
TypeError: Unicode-objects must be encoded before hashing

2)obj是hash對(duì)象

import hashlib
obj = hashlib.md5()
obj.update("小馬過河".encode("utf-8"))
print(obj,type(obj))
#結(jié)果:
<md5 HASH object @ 0x001C5590> <class '_hashlib.HASH'>

3)查看16進(jìn)制結(jié)果

import hashlib
obj = hashlib.md5()
obj.update("小馬過河".encode("utf-8"))
result=obj.hexdigest()
print(result)
#結(jié)果:
24f67b0f6d02adc8867d612e0e0fc40a

4)給加密增添難度

import hashlib
obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8"))  #添加一些內(nèi)容,提高加密復(fù)雜度。此處的字符串也要先編碼,
obj.update("小馬過河".encode('utf-8'))
result = obj.hexdigest()
print(result)
#結(jié)果:
b11740508f28e04837f2c0e3a58cf990

5)用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é)果:
35093270b6352fa9721370b781f7b4d7

三:應(yīng)用場(chǎng)景案例

用戶賬號(hào)密碼登錄,對(duì)明文密碼進(jìn)行加密

import 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('**************用戶注冊(cè)**************')
    while True:
        user = input('請(qǐng)輸入用戶名:')
        if user == 'N':
            return
        pwd = input('請(qǐng)輸入密碼:')
        temp = {'username':user,'password':get_md5(pwd)}
        USER_LIST.append(temp)
def login():
    print('**************用戶登陸**************')
    user = input('請(qǐng)輸入用戶名:')
    pwd = input('請(qǐng)輸入密碼:')
    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é)果:
**************用戶注冊(cè)**************
請(qǐng)輸入用戶名:小馬過河
請(qǐng)輸入密碼:123456
請(qǐng)輸入用戶名:N
**************用戶登陸**************
請(qǐng)輸入用戶名:小馬過河
請(qǐng)輸入密碼:123456
登陸成功

用戶登錄場(chǎng)景分析:實(shí)現(xiàn)用戶注冊(cè),然后進(jìn)行用戶登錄的代碼分析。

代碼分析:

四、校驗(yàn)文件的一致性

如何保證下載的文件過程中不丟包,保證下載數(shù)據(jù)的完整性

# -文件一致校驗(yàn)#--
'''可以拷貝一個(gè)文件放在兩個(gè)不同的盤中,然后通過判斷兩個(gè)文件的hash值是否相等,判斷兩個(gè)文件是否是同一個(gè)文件'''
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())

五、對(duì)明文密碼進(jìn)行加密

# 應(yīng)用:對(duì)明文密碼進(jìn)行加密(暴力破解--用明文密碼用一種算法算出一個(gè)hash值,與截取的hash值進(jìn)行比對(duì),比對(duì)成功說明明文密碼一致,就可以破解用戶的密碼)
'''如用戶在某網(wǎng)站進(jìn)行注冊(cè)信息,這個(gè)時(shí)候防止信息被惡意攔截獲取,可以對(duì)用戶明文密碼進(jìn)行加密,存成hash值得形式,這樣用戶每次登陸雖然輸?shù)氖敲魑拿艽a,校驗(yàn)hash值即可'''
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update(password.encode('utf-8'))
print(m.hexdigest())             #00dcbdaede875d5e23f1f9f64c7849ef
# 對(duì)密碼進(jìn)行加鹽(暗號(hào))進(jìn)一步加強(qiáng)密碼的安全性
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update('一行白鷺上青天'.encode('utf-8'))         #對(duì)密碼加鹽
m.update(password.encode('utf-8'))

六、破解用戶注冊(cè)的密碼

# 重點(diǎn)
'''模擬撞庫(kù)破解密碼'''
import hashlib
passwds=[                      #可以通過random實(shí)現(xiàn)對(duì)passwds中的內(nèi)容
    'alex3714',
    'alex1313',
    'alex94139413',
    'alex123456',
    '123456alex',
    'a123lex',
    ]
def make_passwd_dic(passwds):                #通過明文密碼列表,造出與之對(duì)應(yīng)的hash值得字典
    dic={}
    for passwd in passwds:
        m=hashlib.md5()                      #使用md5算法,造了一個(gè)工廠
        m.update(passwd.encode('utf-8'))     #給工廠運(yùn)送原材料(即我們要加密的內(nèi)容)
        dic[passwd]=m.hexdigest()            #產(chǎn)出hash值(即最終的產(chǎn)品),將其加入到我們事先造好的空字典中,字典形式:{密碼:hash值}
    return dic
def break_code(cryptograph,passwd_dic):      #判斷攔截的hash值是否與字典中事先造好的hash值相等,相等則說明成功進(jìn)行破解
    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的字典當(dāng)做函數(shù)的實(shí)參傳給對(duì)應(yīng)的形參

七、hmac模塊的加密方式,與hashlib類似

'''python 還有一個(gè) hmac 模塊,它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 進(jìn)行進(jìn)一步的處理然后再加密:'''
import hmac
h = hmac.new('天王蓋地虎'.encode('utf8'))          #hmac必須要加鹽
h.update('hello'.encode('utf8'))
print(h.hexdigest())                 #1abaae8f65f68f2695a8545c5bc8e738
#要想保證hmac最終結(jié)果一致,必須保證:
#1:hmac.new括號(hào)內(nèi)指定的初始key一樣
#2:無(wú)論update多少次,校驗(yàn)的內(nèi)容累加到一起是一樣的內(nèi)容
# 下面單重方式得到的結(jié)果是一樣的
import hmac
h1=hmac.new(b'tom')          #初始值必須保證一致,最終得到的結(jié)果就會(huì)不一樣
h1.update(b'hello')
h1.update(b'world')
print(h1.hexdigest())
h2=hmac.new(b'tom')         #初始值必須保證一致,最終得到的結(jié)果就會(huì)不一樣
h2.update(b'helloworld')
print(h2.hexdigest())
h3=hmac.new(b'tomhelloworld')   #初始值不一樣,所以與上面兩種的結(jié)果不一樣
print(h3.hexdigest())
'''
0426ccec3b134e8c18fdcefee841ef25
0426ccec3b134e8c18fdcefee841ef25
ff1214d895bbaf5f1847db4ebae8212e
'''

到此這篇關(guān)于Python算法模塊之hashlib模塊詳解的文章就介紹到這了,更多相關(guān)Python的hashlib模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于PyQt6實(shí)現(xiàn)顏色選擇器小工具

    基于PyQt6實(shí)現(xiàn)顏色選擇器小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt6實(shí)現(xiàn)顏色選擇器小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)

    Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)

    這篇文章主要介紹了Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Django ORM:values()和annotate()方法的使用

    Django ORM:values()和annotate()方法的使用

    本文介紹Django ORM中values()和annotate()的用法,values()返回字典形式的查詢結(jié)果,annotate()添加計(jì)算字段,兩者結(jié)合可實(shí)現(xiàn)分組統(tǒng)計(jì),注意使用順序以優(yōu)化性能
    2025-07-07
  • Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法詳解

    Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法,結(jié)合實(shí)例形式分析了Python TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Python+Pygame實(shí)戰(zhàn)之吃豆豆游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)戰(zhàn)之吃豆豆游戲的實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實(shí)現(xiàn)仿吃豆豆游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python游戲開發(fā)有一定幫助,需要的可以參考一下
    2022-06-06
  • Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)

    Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)

    Python是一種廣泛使用的編程語(yǔ)言,非常適合處理各種任務(wù),包括批量解壓縮文件,本文主要介紹了Python實(shí)現(xiàn)批量壓縮解壓文件,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Pycharm報(bào)錯(cuò)Non-zero?exit?code?(2)的完美解決方案

    Pycharm報(bào)錯(cuò)Non-zero?exit?code?(2)的完美解決方案

    最近在使用pycharm安裝或升級(jí)模塊時(shí)出現(xiàn)了錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Pycharm報(bào)錯(cuò)Non-zero?exit?code?(2)的完美解決方案,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python使用MySQL8.2讀寫分離實(shí)現(xiàn)示例詳解

    Python使用MySQL8.2讀寫分離實(shí)現(xiàn)示例詳解

    在這篇文章中,我們將了解如何將?MySQL?8.2?的讀寫分離功能與?MySQL-Connector/Python?一起使用的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 利用python實(shí)現(xiàn)漢諾塔游戲

    利用python實(shí)現(xiàn)漢諾塔游戲

    這篇文章主要為大家詳細(xì)介紹了利用python實(shí)現(xiàn)漢諾塔游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • flask框架中勾子函數(shù)的使用詳解

    flask框架中勾子函數(shù)的使用詳解

    這篇文章主要介紹了flask框架中勾子函數(shù)的使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08

最新評(píng)論

桐柏县| 鄂伦春自治旗| 富宁县| 珠海市| 武宣县| 故城县| 潞西市| 全椒县| 江北区| 舟山市| 稻城县| 涞水县| 贵州省| 房山区| 休宁县| 通辽市| 娱乐| 襄城县| 黄陵县| 山西省| 长葛市| 奉节县| 大关县| 万州区| 淳安县| 长垣县| 栖霞市| 平和县| 南京市| 宾阳县| 临海市| 龙川县| 淮南市| 来宾市| 浪卡子县| 封丘县| 林周县| 石狮市| 赞皇县| 洛南县| 长沙县|