欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中hashlib模塊的摘要算法詳解

 更新時(shí)間:2023年08月11日 10:43:21   作者:愛吃 香菜  
這篇文章主要介紹了Python中hashlib模塊的摘要算法詳解,摘要算法又稱哈希算法、散列算法,它通過一個(gè)函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長度固定的數(shù)據(jù)串,通常用16進(jìn)制的字符串表示,需要的朋友可以參考下

hashlib 模塊

Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?

摘要算法又稱哈希算法、散列算法。它通過一個(gè)函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。

摘要算法之所以能指出數(shù)據(jù)是否被篡改過,就是因?yàn)檎瘮?shù)是一個(gè)單向函數(shù),計(jì)算 f(data) 很容易,但通過 digest 反推 data 卻非常困難。

而且,對原始數(shù)據(jù)做一個(gè)bit的修改,都會(huì)導(dǎo)致計(jì)算出的摘要完全不同。

示例

我們以常見的摘要算法MD5為例,計(jì)算出一個(gè)字符串的MD5值:

import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi'.encode('utf-8'))
print(md5.hexdigest())

那么計(jì)算出來的md5就是

d7d8c24cddfb4c15b83db713badda3d3

如果數(shù)據(jù)量很大,可以分塊多次調(diào)用 update() ,最后計(jì)算的結(jié)果是一樣的:

 
import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi'.encode('utf-8'))
md5.update(" 歡迎關(guān)注傷心的辣條".encode('utf-8'))
print(md5.hexdigest())

最后的結(jié)果

96f4063331ea2c477fb3d7e980d73404

試試改動(dòng)一個(gè)字母,看看計(jì)算的結(jié)果是否完全不同。

import hashlib
md5 = hashlib.md5()
md5.update('my name is leizi1'.encode('utf-8'))
md5.update(" 歡迎關(guān)注傷心的辣條 ".encode('utf-8'))
print(md5.hexdigest())

結(jié)果打印

57488933f9d74f5404533d111cbbf4e4

MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit/16字節(jié),通常用一個(gè)32位的16進(jìn)制字符串表示。

另一種常見的摘要算法是SHA1,調(diào)用SHA1和調(diào)用MD5完全類似:

import hashlib
sha1 = hashlib.sha1()
sha1.update('my name is leizi '.encode('utf-8'))
sha1.update('歡迎關(guān)注傷心的辣條'.encode('utf-8'))
print(sha1.hexdigest())

結(jié)果:

abbe3ae3d30736838602e9d119a2dfe016577a07

常用的屬性

hashlib.algorithms
#列出所有加密算法
h.digest_size
#產(chǎn)生的散列字節(jié)大小。
h.block_size
#哈希內(nèi)部塊的大小

常用方法

hash.new([arg])
# 創(chuàng)建指定加密模式的hash對象
hash.update(arg)
# 更新哈希對象以字符串參數(shù)。如果同一個(gè)hash對象重復(fù)調(diào)用該方法,m.update(a); m.update(b) 等價(jià)于 m.update(a+b)
hash.digest()
# 返回摘要,作為二進(jìn)制數(shù)據(jù)字符串值。
hash.hexdigest()
# 返回摘要,作為十六進(jìn)制數(shù)據(jù)字符串值
hash.copy()
# 復(fù)制

hashlib的特點(diǎn)

1、摘要算法在很多地方都有廣泛的應(yīng)用。

2、要注意摘要算法不是加密算法,不能用于加密(因?yàn)闊o法通過摘要反推明文),只能用于防篡改。

3、它的單向計(jì)算特性決定了可以在不存儲(chǔ)明文口令的情況下驗(yàn)證用戶口令。

一個(gè)優(yōu)秀的 hash 算法,將能實(shí)現(xiàn):

  • 正向快速:給定明文和 hash 算法,在有限時(shí)間和有限資源內(nèi)能計(jì)算出 hash 值。
  • 逆向困難:給定(若干) hash 值,在有限時(shí)間內(nèi)很難(基本不可能)逆推出明文。
  • 輸入敏感:原始輸入信息修改一點(diǎn)信息,產(chǎn)生的 hash 值看起來應(yīng)該都有很大不同。
  • 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的 hash 值一致(發(fā)生沖突)。即對于任意兩個(gè)不同的數(shù)據(jù)塊,其hash值相同的可能性極??;對于一個(gè)給定的數(shù)據(jù)塊,找到和它hash值相同的數(shù)據(jù)塊極為困難。

除了上面,我們列舉的幾個(gè),庫里還有這些加密方式:

  • sha224()
  • sha256()
  • sha384()
  • sha512()
  • blake2b()
  • blake2s()
  • sha3_224
  • sha3_256
  • sha3_384
  • sha3_512
  • shake_128
  • shake_256
  • 等等

主要的應(yīng)用場景呢,就是我們的密碼的加密和明文的加密,按照一定的約定去形成我們的加密的方式即可,有些時(shí)候?yàn)榱吮苊馓^于簡單的加密,我們會(huì)約定一個(gè)私鑰,增加加密的復(fù)雜性。

在自動(dòng)化中,我還會(huì)用這個(gè)產(chǎn)生不一樣的文件的名稱,這樣可以方便在自動(dòng)化的過程中有區(qū)分。

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

相關(guān)文章

  • python生成IP段的方法

    python生成IP段的方法

    這篇文章主要介紹了python生成IP段的方法,涉及Python文件讀寫及隨機(jī)數(shù)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python pandas如何根據(jù)指定條件篩選數(shù)據(jù)

    Python pandas如何根據(jù)指定條件篩選數(shù)據(jù)

    這篇文章主要介紹了Python pandas如何根據(jù)指定條件篩選數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python常量折疊基礎(chǔ)知識點(diǎn)講解

    python常量折疊基礎(chǔ)知識點(diǎn)講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python常量折疊基礎(chǔ)知識點(diǎn)講解,對此有興趣的朋友可以跟著學(xué)習(xí)下。
    2021-02-02
  • Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器

    Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器

    隨著計(jì)算機(jī)性能的提升,人們對計(jì)算機(jī)個(gè)性化的要求也越來越高了,自己使用的計(jì)算機(jī)當(dāng)然要設(shè)置成自己喜歡的風(fēng)格!本文就來用Python做個(gè)桌面壁紙下載器,需要的可以參考一下
    2022-11-11
  • 對django的User模型和四種擴(kuò)展/重寫方法小結(jié)

    對django的User模型和四種擴(kuò)展/重寫方法小結(jié)

    今天小編就為大家分享一篇對django的User模型和四種擴(kuò)展/重寫方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Pandas篩選某列過濾的方法

    Pandas篩選某列過濾的方法

    本文主要介紹了Pandas篩選某列過濾的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 對python中dict和json的區(qū)別詳解

    對python中dict和json的區(qū)別詳解

    今天小編就為大家分享一篇對python中dict和json的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Pycharm制作搞怪彈窗的實(shí)現(xiàn)代碼

    Pycharm制作搞怪彈窗的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Pycharm制作搞怪彈窗(聲音強(qiáng)制最大,屏幕亮度強(qiáng)制最亮,按鈕躲避,彈窗炸彈),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Python map和reduce函數(shù)用法示例

    Python map和reduce函數(shù)用法示例

    這篇文章主要介紹了Python map和reduce函數(shù)用法示例,本文給出了兩個(gè)函數(shù)的多個(gè)用法示例,需要的朋友可以參考下
    2015-02-02
  • python如何生成各種隨機(jī)分布圖

    python如何生成各種隨機(jī)分布圖

    這篇文章主要為大家詳細(xì)介紹了python如何生成各種隨機(jī)分布圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論