Python中hashlib模組詳解

2021-10-03 08:38:07 字數 4715 閱讀 4694

三、hashlib的特點

四、**實操

hashlib 是乙個提供了一些流行的hash(摘要)演算法的python標準庫.其中所包括的演算法有 md5, sha1, sha224, sha256, sha384, sha512等

什麼是摘要演算法呢?摘要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用16進製制的字串表示)。更多請看:hashlib — 安全雜湊與訊息摘要

本文以hashlib中md5演算法為例,其他的sha224、sha256演算法用法和md5基本一致。如果想看其他案例可以參考我的博文:用python實現md5、sha256、sha384、sha512、base64加密

1、常用屬性

hashlib.algorithms

#列出所有加密演算法

h.digest_size

#產生的雜湊位元組大小。

h.block_size

#雜湊內部塊的大小

2、常用方法
hash

.new(

[arg]

)# 建立指定加密模式的hash物件

hash

.update(arg)

# 更新雜湊物件以字串引數。如果同乙個hash物件重複呼叫該方法,m.update(a); m.update(b) 等價於 m.update(a+b)

hash

.digest(

)# 返回摘要,作為二進位制資料字串值。

hash

.hexdigest(

)# 返回摘要,作為十六進製制資料字串值

hash

.copy(

)# 複製

3、使用示例
# md5 的使用

import hashlib

defjm_md5

(password)

: m = hashlib.md5(

)# 構建md5物件

m.update(password.encode(encoding=

'utf-8'))

#設定編碼格式 並將字串新增到md5物件中

password_md5 = m.hexdigest(

)# hexdigest()將加密字串 生成十六進製制資料字串值

return password, password_md5

g = jm_md5(

'123456'

)print

(g)

1、摘要演算法在很多地方都有廣泛的應用。

2、要注意摘要演算法不是加密演算法,不能用於加密(因為無法通過摘要反推明文),只能用於防篡改。

3、它的單向計算特性決定了可以在不儲存明文口令的情況下驗證使用者口令。

乙個優秀的 hash 演算法,將能實現:

參考部落格

正向快速:給定明文和 hash 演算法,在有限時間和有限資源內能計算出 hash 值。

逆向困難:給定(若干) hash 值,在有限時間內很難(基本不可能)逆推出明文。

輸入敏感:原始輸入資訊修改一點資訊,產生的 hash 值看起來應該都有很大不同。

衝突避免:很難找到兩段內容不同的明文,使得它們的 hash 值一致(發生衝突)。即對於任意兩個不同的資料塊,其hash值相同的可能性極小;對於乙個給定的資料塊,找到和它hash值相同的資料塊極為困難。

可以看看我其他篇博文:用python實現md5、sha256、sha384、sha512、base64加密

1、舉例子

import hashlib

# 一、在構建物件直接插入加密字串

m1 = hashlib.md5(

'hello python'

.encode(encoding=

'utf-8'))

# 構建md5物件

print

(m1.hexdigest())

# 結果為: e53024684c9be1dd3f6114ecc8bbdddc

# 二、通過update方法 往md5物件中增加字串引數

m2 = hashlib.md5(

)# 構建md5物件

m2.update(

'hello python'

.encode(encoding=

'utf-8'))

# 設定編碼格式 並將字串新增到md5物件中

password_md5 = m2.hexdigest(

)print

(m2.hexdigest())

# 結果為 e53024684c9be1dd3f6114ecc8bbdddc

# 三、當資料量過過大時,可以分塊摘要,例如:

m3 = hashlib.md5(

)m3.update(

"hello "

.encode(

"utf-8"))

# 注意:分塊是空格也要保持一致

m3.update(

"python"

.encode(

"utf-8"))

print

(m3.hexdigest())

# 結果為:e53024684c9be1dd3f6114ecc8bbdddc

# md5是最常見的摘要演算法,速度很快,生成結果是固定的128 bit位元組,通常用乙個32位的16進製制字串表示。

三種方式,往構造的md5物件中傳參,只要傳參的字串一致,最後生成的結果是一樣的。

這說明hash演算法就像一座工廠,工廠接收你送來的原材料(可以用m.update()為工廠運送原材料),經過加工返回的產品就是hash值。這也是摘要演算法的乙個特點,它不是加密演算法,不能用於加密(因為無法通過摘要反推明文),只能用於防篡改。

2、應用場景案例

hashlib模組主要應用於,使用者賬號密碼登入,對明文密碼進行加密等

import hashlib

user_list =

defpwd_md5

(password)

: password = password+

'hello python'

# 字串混淆加鹽,可以設定更複雜一點

return hashlib.md5(password.encode(

"utf-8"))

.hexdigest(

)def

register()

:print

('**************使用者註冊**************'

)while

true

: user =

input

('請輸入使用者名稱:'

)if user.isalpha():

break

while

true

: password1 =

input

('請輸入密碼》:'

).strip(

) passwprd2 =

input

('請重複密碼》:'

).strip(

)if password1 == passwprd2:

password = pwd_md5(password1)

# 將密碼進行md5加密

break

else

:print

('密碼不正確,重新輸入!'

) temp =

deflogin()

:print

('**************使用者登陸**************'

) user =

input

('請輸入使用者名稱:'

) pwd =

input

('請輸入密碼:'

)for item in user_list:

if item[

'username'

]== user and item[

'password'

]== pwd_md5(pwd)

:return

true

if __name__==

'__main__'

: register(

)if login():

print

('登陸成功'

)else

:print

('登陸失敗'

)結果:

****

****

****

**使用者註冊**

****

****

****

請輸入使用者名稱:wuhan

請輸入密碼:

123456

****

****

****

**使用者登陸**

****

****

****

請輸入使用者名稱:小馬過河

請輸入密碼:

123456

登陸成功

**分析:

1、使用者登入需要使用密碼,密碼一定要加密,保證使用者的資訊保安。

1)加密可以使用hashlib模組進行加密。

2)加密可以寫成加密函式,方便多處呼叫

3)提高密碼解密的複雜性,**中多加字串。(加密演算法雖然依然非常厲害,但是也存在缺陷,即:通過撞庫可以反解。所以,有必要對加密密碼進行加鹽。)

python中的hashlib模組

hashlib是乙個提供字串加密功能的模組,包含md5和sha的演算法,md5和sha是摘要演算法,摘要演算法是什麼呢 也可以稱為雜湊演算法,離散演算法。通過乙個函式將任意長度的資料轉化為乙個長度固定的資料串,摘要函式是乙個單向函式,計算f data 很容易,但是通過digest反推data非常困難...

python中的hashlib模組簡介

import hashlib 首先匯入hashlib模組 m hashlib.加密方式 選擇需要的加密方式 m.update 要加密的資料.encode utf8 對需要加密的資料進行加密 m.disgest 獲取加密值,返回二進位制資料字串值 m.hexdisgest 獲取加密值,返回十六進製制資...

Python中hashlib模組的使用

hashlib是 python 下一款與加密相關的庫包,提供摘要演算法 md5 sha1 sha224 sha256 sha384 sha512 blake2b blake2s sha3 224 sha3 256 sha3 384 sha3 512 shake 128 shake 256。摘要演算法...