在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這個...