溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python加密與解密模塊hashlib與hmac怎么使用

發(fā)布時間:2022-06-06 10:01:59 來源:億速云 閱讀:256 作者:iii 欄目:開發(fā)技術(shù)

這篇“Python加密與解密模塊hashlib與hmac怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python加密與解密模塊hashlib與hmac怎么使用”文章吧。

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

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

MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit字節(jié),通常用一個32位的16進制字符串表示。

一、hashlib加密模塊

hash是一種算法(Python3.版本里使用hashlib模塊代替了md5模塊和sha模塊,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 算法),該算法接受傳入的內(nèi)容,經(jīng)過運算得到一串hash值。

hash值的特點:

  • 只要傳入的內(nèi)容一樣,得到的hash值一樣,可用于非明文密碼傳輸時密碼校驗

  • 不能由hash值返解成內(nèi)容,即可以保證非明文密碼的安全性

  • 只要使用的hash算法不變,無論校驗的內(nèi)容有多大,得到的hash值長度是固定的,可以用于對文本的哈希處理

MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit字節(jié),通常用一個32位的16進制字符串表示

import hashlib

m = hashlib.md5() # 創(chuàng)建md5對象
b = 'hello'.encode(encoding='utf-8') # 此處必須encode, 或者 b = bytes(str, encoding='utf-8'),作用相同都是encode為bytes,將str默認的unicode轉(zhuǎn)成utf-8.
m.update(b); #該方法只接受bytes類型


print(m.hexdigest())  #將hash中的數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù),其中只包含十六進制的數(shù)字。 5d41402abc4b2a76b9719d911017c592


# 另一種寫法:b‘'前綴代表的就是bytes ,對英文加密,才可以使用b' '前綴,b' '在python中只能對ASCII字符進行轉(zhuǎn)碼。
str_md5 = hashlib.md5(b'this is a md5 test.').hexdigest() 
print('MD5加密后為 :' + str_md5)

如果數(shù)據(jù)量很大,可以分塊多次調(diào)用update(),最后計算的結(jié)果是一樣的。

SHA1的生成結(jié)果是160 bit字節(jié),通常用一個40位的16進制字符串表示。

比SHA1更安全的算法是SHA256和SHA512,不過越安全的算法不僅越慢,而且摘要長度更長。

二、hmac 加鹽加密模塊

Python自帶的hmac模塊實現(xiàn)了標準的Hmac算法:Keyed-Hashing for Message Authentication。它通過一個標準算法,在計算哈希的過程中,把key混入計算過程中。它內(nèi)部對我們創(chuàng)建key和內(nèi)容做過某種處理后再加密。

和我們自定義的加salt算法不同,Hmac算法針對所有哈希算法都通用,無論是MD5還是SHA-1。采用Hmac替代我們自己的salt算法,可以使程序算法更標準化,也更安全。

我們來看看如何使用hmac實現(xiàn)帶key的哈希。

我們首先需要準備待計算的原始消息message,隨機key,哈希算法,這里采用MD5,使用hmac的代碼如下:

import hmac
message = b'Hello, world!'
key = b'secret'
h = hmac.new(key, message, digestmod='MD5')
# 如果消息很長,可以多次調(diào)用h.update(msg)
h.hexdigest() # 'fa4ee7d173f2d97ee79022d1a7355bcf'

注意:要注意傳入的key和message都是bytes類型,str類型需要首先編碼為bytes。

def hmac_md5(key, s):
    return hmac.new(key.encode('utf-8'), s.encode('utf-8'), 'MD5').hexdigest()

如果要保證hmac模塊最終結(jié)果一致,必須保證:

  • hmac.new括號內(nèi)指定的初始key一樣

  • 無論update多少次,校驗的內(nèi)容累加到一起是一樣的內(nèi)容

import hashlib
import hmac

# 注意hmac模塊只接受二進制數(shù)據(jù)的加密
h2 = hmac.new(b'hash', msg=None, digestmod=hashlib.md5)
h2.update(b'hello')
h2.update(b'world')
print(h2.hexdigest())  # 905f549c5722b5850d602862c34a763e

h3 = hmac.new(b'hash', msg=None, digestmod=hashlib.md5)
h3.update(b'helloworld')
print(h3.hexdigest())  # 905f549c5722b5850d602862c34a763e

h4 = hmac.new(b'hashhelloworld', msg=None, digestmod=hashlib.md5)
print(h4.hexdigest())  # a7e524ade8ac5f7f33f3a39a8f63fd25

以上就是關(guān)于“Python加密與解密模塊hashlib與hmac怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI