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

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

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

hashlib 模塊

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

什么是摘要算法呢?

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

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

而且,對(duì)原始數(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對(duì)象
hash.update(arg)
# 更新哈希對(duì)象以字符串參數(shù)。如果同一個(gè)hash對(duì)象重復(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ā)生沖突)。即對(duì)于任意兩個(gè)不同的數(shù)據(jù)塊,其hash值相同的可能性極??;對(duì)于一個(gè)給定的數(shù)據(jù)塊,找到和它hash值相同的數(shù)據(jù)塊極為困難。

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

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

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

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

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

相關(guān)文章

  • Python統(tǒng)計(jì)不同整數(shù)的出現(xiàn)次數(shù)的三種方法

    Python統(tǒng)計(jì)不同整數(shù)的出現(xiàn)次數(shù)的三種方法

    在數(shù)據(jù)處理和分析領(lǐng)域,統(tǒng)計(jì)不同整數(shù)的出現(xiàn)次數(shù)是一個(gè)常見需求,無論是清洗日志數(shù)據(jù)、分析用戶行為,還是處理實(shí)驗(yàn)觀測(cè)值,我們都需要快速準(zhǔn)確地獲取不同整數(shù)的數(shù)量,本文將用通俗的語言,結(jié)合Python代碼示例,為你系統(tǒng)講解三種主流解決方案,需要的朋友可以參考下
    2025-04-04
  • 最新評(píng)論

    柏乡县| 成都市| 周口市| 华安县| 平阴县| 宣城市| 安平县| 灯塔市| 古丈县| 漳平市| 炉霍县| 玛曲县| 南漳县| 长春市| 杭锦后旗| 九台市| 昌黎县| 武强县| 丁青县| 米脂县| 金华市| 如东县| 房产| 乌兰县| 阳信县| 乐东| 德江县| 徐州市| 防城港市| 霍邱县| 余庆县| 海城市| 花垣县| 会宁县| 芦溪县| 镇巴县| 孟津县| 高陵县| 清原| 绥中县| 建平县|