python3中的md5加密例項

2022-09-28 02:12:12 字數 3301 閱讀 2309

在python3的標準庫中,已經移除了md5,而關於hash加密演算法都放在hashlib這個標準庫中,如sha1、sha224、sha256、sha384、sha512和md5演算法等。

對於學習任何一門程式類知識,我都認為去看官方文件這種學習方式最有效的之一,只不過一般這些文件都是英文版的,對於一些學習者來說可能會有一定門檻,但習慣於閱讀英文文章,是非常重要的。

建議直接閱讀python3的hashlib文件:

在hashlib庫的hash演算法中,提供了很多加密演算法,有 sha1()、sha224()、sha256()、sha384()、sha512()、blake2b()和 blake2s()、md5(),這些方法都通過統一介面返回乙個物件,例如,使用sha256()可以建立乙個sha-256的雜湊物件。

當然,進行md5加密演算法,就要用到md5()方法:

>>> import hashlib

>>> m = hashlib.md5()

>>> m.update(b'123')

>>> m.hexdigest()

'202cb962ac59075b964b0程式設計客棧7152d234b70'

# 或者可以這樣

>>> hashlib.md5(b'123').hexdigest()

'202cb962ac59075b964b07152d234b70'

# 也可以使用hash.new()這個一般方法

>>> hashlib.new('md5', b'123').hexdigest()

'202cb962ac59075b964b07152d234b70'

以上是對於英文進行md5加密的,如果要對中文進行加密,發現按照上面來寫會報錯,原因在於字元轉碼問題,要如下寫:

>>> import hashlib

>>> data = '你好'

>>> hashlib.md5(data.encode(encoding='utf-8')).hexdigest()

'7eca689f0d3389d9dea66ae112e5cfd7'

此處先將資料轉換成utf-8格式的,使用網上工具對比下加密的結果,發現有的md5加密工具並不是使用utf-8格式加密的。

經測試目前發現可以轉為utf-8、gbk、gb2312、gb18030,不分大小寫(因為gbk/gb2312/gb18030均是針對漢字的編碼,所以md5加密後結果一樣)。

除了這些編碼格式之外,還會有其他編碼的,目前還沒發現,等各位補充。

看下面例項:

>>> hashlib.md5('你好'.encode(encoding='utf-8')).hexdigest()

'7eca689f0d3389d9dea66ae112e5cfd7'

>>> hashlib.md5('你好'.encode(encoding='gbk')).hexdigest()

'b94ae3c6d892b29cf48d9bea819b27b9'

>>> hashlib.md5('你好'.encode(encoding='gb')).hexdigest()

'b94ae3c6d892b29cf48d9bea819b27b9'

>>> hashlib.md5('你好'.encode(encoding='gb18030')).hexdigest()

'b94ae3c6d892b29cf48d9bea819b27b9'

如果你僅僅查md5的寫法,看上面例項就夠了;

如果你是python新手,想了解這些方法的意思和用法,繼續看下面內容。

解析1. hashlib.new(name[, data])方法

這是個一般性方法。

name傳入的是雜湊加密演算法的名稱,如md5;

data傳入的是需要加密的資料,可忽略,在之後update()中傳入。

>>> m = hashlib.new('md5')

>>> m.update(b'123456')

>>> m.hexdigest()

'202cb962ac59075b964b07152d234b70'

可以使用hashlib.algorithms_guaranteed或者hashlib.algorithms_**ailable這兩個內建屬性檢視hashlib支援哪些加密演算法。

hashlib.algorithms_guaranteed是在所有平台上,保證被hashlib模組支援的hash演算法名稱的集合;

hashlib.algorithms_**ailable是在當前執行的python編譯器可用的hash演算法名稱的集合,由於openssl的原因,在這當中可能會出現重複的hash演算法名稱。

hashlib.algorithms_guaranteed是hashlib.algorithms_**ailable的子集。

看下面輸出:

>>> hashlib.algorithms_guaranteed

>&www.cppcns.comgt;> hashlib.algorithms_**ailable

2. hash.update(arg)

傳入arg物件來更新hash的物件。必須注意的是,該方法只接受byte型別,否則會報錯。這就是要在引數前新增b 來轉換型別的原因:

>>> m = hashlib.md5()

>>> m.update('123456')

typeerror: unicode-objects must be encoded before hashing

同時要注意,重複hdcxvozjh呼叫update(arg)方法,是會將傳入的arg引數進行拼接,而不是覆蓋。必須注意這一點,因為你在不熟悉update()原理的時候,你很可能就會被它坑了。

也就是說,m.update(a); m.update(b) 等價於m.update(a+b),看下面例子:

>>> m = hashlib.md5()

>>> m.update(b'123')

>>> m.hexdigest()

'202cb962ac59075b964b07152d234b70'

>>> m.update(b'456')

>>> m.hexdigest()

'e10adc3949ba59abbe56e057f20f883e'

>>> hashlib.md5(b'123456').hexdigest()

'e10adc3949ba59abbe56e057f20f883e'

3. hash.hexdigest()

都知道,在英語中hex有十六進製制的意思,因此該方法是將hash中的資料轉換成資料,其中只包含十六進製制的數字。另外還有hash.digest()方法。

本文標題: python3中的md5加密例項

本文位址:

Python3中的md5加密

在寫網路爬蟲模擬登陸時,遇到提交表單時是一串數字和字母,才知道經過了md5加密。md5加密的密碼 md5訊息摘要演算法 英語 md5 message digest algorithm 一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位 16位元組 的雜湊值 hash value 用於確保資訊傳輸完...

Python3中的md5加密

def get md5 password 1 例項化加密物件 pswmd5 hashlib.md5 2 對密碼進行加密 pswmd5.update password.encode utf 8 3 返回加密後的密碼 return pswmd5.hexdigest 在寫網路爬蟲模擬登陸時,遇到提交表單時...

Python3中的md5加密

python的hashlib提供了常見的摘要演算法,如md5,sha1等等。摘要演算法又稱雜湊演算法 雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串 通常用16進製制的字串表示 在python3的標準庫中,已經移除了md5模組,而關於hash加密演算法都放在hashlib這個...