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

Python中的hashlib模塊解析

 更新時(shí)間:2023年09月22日 09:48:29   作者:XWenXiang  
這篇文章主要介紹了Python中的hashlib模塊解析,hashlib是一個(gè)提供字符加密功能的模塊,包含MD5和SHA的加密算法,具體支持md5,sha1, sha224, sha256, sha384, sha512等算法, 該模塊在用戶登錄認(rèn)證方面應(yīng)用廣泛,對(duì)文本加密也很常見,需要的朋友可以參考下

模塊簡介

1. 這個(gè)模塊針對(duì)許多不同的安全哈希和消息摘要算法實(shí)現(xiàn)了一個(gè)通用接口。

2. 什么是哈希(Hash)? 哈希,是把任意長度的輸入通過散列算法變換成固定長度的輸出,簡單的說就是通過函數(shù),將明文數(shù)據(jù)通過變成密文數(shù)據(jù)達(dá)到加密的作用。

3. 每種類型的 hash 都有一個(gè)構(gòu)造器方法,它們都返回一個(gè)具有相同的簡單接口的 hash 對(duì)象。 例如,使用sha256() 創(chuàng)建一個(gè) SHA-256 hash 對(duì)象。

4. 然后使用 update() 方法向這個(gè)對(duì)象輸入' 字節(jié)類對(duì)象 (通常是 bytes) '。在任何時(shí)候你都可以使用digest() 或 hexdigest() 方法獲得到目前為止輸入這個(gè)對(duì)象的拼接數(shù)據(jù)的 digest。

hashilib 構(gòu)造器

此模塊中常見 hash 算法構(gòu)造器

sha1(), sha224(), sha256(), sha384(), sha512(), blake2b() 和 blake2s()。 md5()

在大部分平臺(tái)上可用的還有

sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256() 等等

如果需要獲取構(gòu)造器對(duì)象,我們可以直接引入模塊 hashilib 后用點(diǎn)的方式生成,如下實(shí)例:

代碼示例

        import hashlib
        h = hashlib.md5()
        print(h)

打印結(jié)果

<md5 _hashlib.HASH object @ 0x00000233D317EAD0>

示例以 md5 為例,在模塊名后用點(diǎn)的方式找到需要的算法構(gòu)造器名稱即可生成算法構(gòu)造器對(duì)象。

hashlib.new() —創(chuàng)建對(duì)象

一個(gè)接受所希望的算法對(duì)應(yīng)的字符串 name 作為第一個(gè)形參的通用構(gòu)造器。

在 new() 括號(hào)中輸入哈希構(gòu)造器算法構(gòu)造器的名稱字符串相當(dāng)于調(diào)用了構(gòu)造器創(chuàng)建了一個(gè)對(duì)象。 此方法和上面寫的用點(diǎn)的方式生成構(gòu)造器對(duì)象結(jié)果是一樣的。

語法格式

hashlib.new(name, [data, ]*, usedforsecurity=True)

代碼示例

import hashlib		
		h = hashlib.new('md5')
		print(h)

打印結(jié)果

<md5 _hashlib.HASH object @ 0x0000025FC95EEAD0>

hash.digest_size

以字節(jié)表示的結(jié)果哈希對(duì)象的大小。

代碼示例

import hashlib
		h = hashlib.md5()
		res1 = h.digest_size
		print(res1)

打印結(jié)果

16

返回該構(gòu)造器的進(jìn)制大小,md5 為16進(jìn)制。

hash.block_size

以字節(jié)表示的哈希算法的內(nèi)部塊大小。

代碼示例

import hashlib
		h = hashlib.md5()
		res1 = h.block_size
		print(res1)

打印結(jié)果

64

hash.update() —傳入?yún)?shù)

用 byte類型 來更新哈希對(duì)象。

代碼示例一

import hashlib
		h = hashlib.md5()
		h.update(b'abcdefg')  # 將字節(jié)型對(duì)象傳入哈希對(duì)象
		res = h.hexdigest()
		print(res)

打印結(jié)果

7ac66c0f148de9519b8bd264312c4d64

1. 調(diào)用 md5() 生成哈希對(duì)象,使用方法 update 輸入需要被加密的對(duì)象,需要注意必須為'字節(jié)型數(shù)據(jù)',

2. 如何獲得字節(jié)型對(duì)象?可以使用字符串的內(nèi)置方法 encode() 轉(zhuǎn)化為字節(jié)型?;蛘?,當(dāng)字符串為英文或者純數(shù)字組成,只要在字符串引號(hào)外加上' b '也可以轉(zhuǎn)化成字節(jié)型。

重復(fù)調(diào)用相當(dāng)于單次調(diào)用并傳入所有參數(shù)的拼接結(jié)果: m.update(a); m.update(b) 等價(jià)于 m.update(a+b)

代碼示例二

import hashlib
		h = hashlib.md5()
		h.update(b'abcd')  # 傳一次 b'abcd' 再傳一次 b'efg' 結(jié)果和傳一次 b'abcdefg'一樣
		h.update(b'efg')
		res = h.hexdigest()
		print(res)

打印結(jié)果

7ac66c0f148de9519b8bd264312c4d64

結(jié)果和示例一中的值一樣。

hash.digest() —返回字節(jié)串對(duì)象

返回當(dāng)前已傳給 update() 方法的數(shù)據(jù)摘要。 這是一個(gè)大小為 digest_size 的字節(jié)串對(duì)象。

也就是說返回被加密后的字節(jié)串對(duì)象。

代碼示例

import hashlib
		h = hashlib.md5()
		h.update(b'abcdefg')
		res = h.digest()
		print(res)

打印結(jié)果

b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'

hash.hexdigest() —返回字符串對(duì)象

類似于 digest() 但摘要會(huì)以兩倍長度字符串對(duì)象的形式返回,其中僅包含十六進(jìn)制數(shù)碼。 這可以被用于在電子郵件或其他非二進(jìn)制環(huán)境中安全地交換數(shù)據(jù)值。

代碼示例

    import hashlib
		h = hashlib.md5()
		h.update(b'abcdefg')
		res = h.hexdigest()
		print(res)

打印結(jié)果

7ac66c0f148de9519b8bd264312c4d64

加密補(bǔ)充

數(shù)據(jù)被加密后是不能被直接解密的,網(wǎng)站上的解密一般都是暴力解密,不斷地在猜在試有可能得出結(jié)果。

加鹽處理

我們還可以通過加鹽操作來提高破解數(shù)據(jù)的難度,加鹽其實(shí)就是在真正要被加密的數(shù)據(jù)中添加其他數(shù)據(jù)。

代碼示例

import hashlib
		h = hashlib.md5()
		h.update('你好帥'.encode('utf8'))  # 假設(shè)為真實(shí)數(shù)據(jù)
		h.update(b'asgxfajchdvb')  # 隨便打的數(shù)據(jù)
		res = h.hexdigest()
		print(res)

打印結(jié)果

ef77c21d860c3ccf4aed6e52720c8e42

因?yàn)?update 調(diào)用多次和調(diào)用一次的結(jié)果相同,我們可以把真假數(shù)據(jù)分開。

如果把假數(shù)據(jù)刪除,結(jié)果是: 195eaff9c88bceae9f094f5ef322e5da所以實(shí)現(xiàn)了對(duì)加密程度的升級(jí)。

動(dòng)態(tài)加鹽

我們可以不將假數(shù)據(jù)寫死,可以通過變量實(shí)現(xiàn)動(dòng)態(tài)加鹽,變量值可以是時(shí)間、用戶名的部分...

代碼示例

import hashlib
		x = 'asgxfajchdvb'
		h = hashlib.md5()
		h.update('你好帥'.encode('utf8'))
		h.update(x.encode('utf8'))
		res = h.hexdigest()
		print(res)

打印結(jié)果

ef77c21d860c3ccf4aed6e52720c8e42

和寫死的結(jié)果一樣。

加密應(yīng)用場景

1. 密碼加密如何比對(duì)

用戶輸入是明文但是到了程序里面之后會(huì)采用相同的加密算法變成密文,之后拿著密文與跟數(shù)據(jù)庫里面的密文比對(duì)如果一致就是密碼正確不一致就是錯(cuò)誤

2. 文件內(nèi)容一致性校驗(yàn)

作為軟件的提供者,提供安全軟件的同時(shí)會(huì)對(duì)給該軟件內(nèi)容做加密處理得到一個(gè)該安全軟件獨(dú)有的密文,用戶在下載軟件之后也會(huì)對(duì)內(nèi)容做相同的加密之后比對(duì)兩次密文是否一致,如果相同表示中途沒有被修改,如果不是表示中途被修改過,可能存在病毒

3. 針對(duì)大文件一致性校驗(yàn)的優(yōu)化策略

如果一個(gè)文件很大,那么如果全部讀取并加密速度太慢,這個(gè)時(shí)候可以考慮對(duì)文件內(nèi)容進(jìn)行切片讀取并加密的操作

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

相關(guān)文章

最新評(píng)論