最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python加密與解密模塊hashlib與hmac

 更新時(shí)間:2022年06月03日 10:27:23   作者:springsnow  
這篇文章介紹了Python中的加密與解密模塊hashlib與hmac,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

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

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

一、hashlib加密模塊

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

hash值的特點(diǎn):

  • 只要傳入的內(nèi)容一樣,得到的hash值一樣,可用于非明文密碼傳輸時(shí)密碼校驗(yàn)
  • 不能由hash值返解成內(nèi)容,即可以保證非明文密碼的安全性
  • 只要使用的hash算法不變,無論校驗(yàn)的內(nèi)容有多大,得到的hash值長度是固定的,可以用于對文本的哈希處理

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

import hashlib

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


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


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

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

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

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

二、hmac 加鹽加密模塊

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

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

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

我們首先需要準(zhǔn)備待計(jì)算的原始消息message,隨機(jī)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括號(hào)內(nèi)指定的初始key一樣
  • 無論update多少次,校驗(yàn)的內(nèi)容累加到一起是一樣的內(nèi)容
import hashlib
import hmac

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

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

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

到此這篇關(guān)于Python加密與解密的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 兒童編程python入門

    兒童編程python入門

    很多家長都想讓孩子學(xué)習(xí)編程,今天我們給大家分享一下關(guān)于兒童python的入門以及簡單的代碼,有興趣的朋友閱讀下吧。
    2018-05-05
  • 使用Python編寫類UNIX系統(tǒng)的命令行工具的教程

    使用Python編寫類UNIX系統(tǒng)的命令行工具的教程

    這篇文章主要介紹了使用Python編寫類UNIX系統(tǒng)的命令行工具的教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python GUI編程學(xué)習(xí)筆記之tkinter中messagebox、filedialog控件用法詳解

    Python GUI編程學(xué)習(xí)筆記之tkinter中messagebox、filedialog控件用法詳解

    這篇文章主要介紹了Python GUI編程學(xué)習(xí)筆記之tkinter中messagebox、filedialog控件用法,結(jié)合實(shí)例形式總結(jié)分析了Python GUI編程tkinter中messagebox、filedialog控件基本功能、用法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Python Barbershop實(shí)現(xiàn)照片換發(fā)型功能

    Python Barbershop實(shí)現(xiàn)照片換發(fā)型功能

    這篇文章主要為大家介紹了一個(gè)開源項(xiàng)目(Barbershop),可以將照片中的發(fā)型更換成另一個(gè),文中實(shí)現(xiàn)過程講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • python排序算法之選擇排序

    python排序算法之選擇排序

    這篇文章主要介紹了python排序算法之選擇排序,選擇排序表示從無序的數(shù)組中,每次選擇最小或最大的數(shù)據(jù),從無序數(shù)組中放到有序數(shù)組的末尾,以達(dá)到排序的效果,需要的朋友可以參考下
    2023-04-04
  • 基于OpenCV的路面質(zhì)量檢測的實(shí)現(xiàn)

    基于OpenCV的路面質(zhì)量檢測的實(shí)現(xiàn)

    這篇文章主要介紹了基于OpenCV的路面質(zhì)量檢測,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python圖像處理庫處理步驟

    Python圖像處理庫處理步驟

    這篇文章主要介紹了Python圖像處理探索之Python圖像處理庫,我們將學(xué)習(xí)使用不同的 Python 庫實(shí)現(xiàn)一些常見的圖像處理、變換和可視化技術(shù),這些技術(shù)通??梢杂米鞲鼜?fù)雜的圖像處理任務(wù)的基本預(yù)處理/后處理步驟,需要的朋友可以參考下
    2023-04-04
  • 將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟

    將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟

    這篇文章主要介紹了將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python使用sort和class實(shí)現(xiàn)的多級(jí)排序功能示例

    Python使用sort和class實(shí)現(xiàn)的多級(jí)排序功能示例

    這篇文章主要介紹了Python使用sort和class實(shí)現(xiàn)的多級(jí)排序功能,涉及Python基于面向?qū)ο蟮脑乇闅v、列表排序、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • Windows下的Jupyter Notebook 安裝與自定義啟動(dòng)(圖文詳解)

    Windows下的Jupyter Notebook 安裝與自定義啟動(dòng)(圖文詳解)

    這篇文章主要介紹了Windows下的Jupyter Notebook 安裝與自定義啟動(dòng)(圖文詳解),需要的朋友可以參考下
    2018-02-02

最新評論

南召县| 朝阳市| 青神县| 天祝| 伽师县| 大姚县| 夹江县| 烟台市| 蒙自县| 赤壁市| 海城市| 睢宁县| 潜江市| 凤凰县| 安泽县| 抚顺县| 崇义县| 禹城市| 晋中市| 垣曲县| 睢宁县| 苏尼特左旗| 夏邑县| 岱山县| 固镇县| 图们市| 佛冈县| 陇南市| 芮城县| 大埔区| 阳原县| 山东| 渭南市| 凌源市| 玉屏| 大庆市| 新竹县| 巴林右旗| 邯郸县| 南部县| 南通市|