Python?hashlib模塊詳情
前言:
在互聯(lián)網(wǎng)的時代,我們在網(wǎng)絡(luò)中傳輸過程中都是要經(jīng)過加密的,常見網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)募用芊绞接?code>MD5和RSA
算法。當然,加密算法還有很多中按加密、解密方式不同分為:對稱加密
、非對稱加密
、hash加密
。其中MD5算法的基礎(chǔ)是使用的hash
算法,針對不同安全的hash
安全算法,Python
也提一個通用接口hashlib
模塊。
1. hashlib 模塊概述
hashlib
是Python
內(nèi)置用于對安全哈希和消息摘要的通用接口模塊。hashlib
模塊支持提供目前主流hash算法如MD5
、SHA-1
、SHA-2
、SHA-256
等通用構(gòu)造方法,并且返回帶有同樣接口的hash對象。
1.1hashlib 模塊特點
- 提供主流的
hash
算法操作,替代md5
模塊和sha
模塊 - 模塊調(diào)用簡單,無需下載安裝
- 主要應(yīng)用在文本加密場景如用戶登錄認證
1.2hashlib 模塊使用步驟
- 導(dǎo)入hashlib庫:
import hashlib
- 建立加密對象
- 對字符串進行加密處理
- 獲取轉(zhuǎn)換成新的N個Bit
2. hashlib 工作原理
hashlib
模塊中加密方式是我們常見的hash
算法。hash算法又稱為散列表(hash table
),也叫做哈希表。
2.1hash 算法特點
- 具有唯一確定性,不同字符串加密后都是不一樣的
- 不可逆性,hash只有加密沒有解密過程
- 散列碰撞,輸出和輸入值不是一一對應(yīng)關(guān)系
2.2hash 構(gòu)造方法
直接定址方法
- 公式一:
hash(key) = key
- 公式二:
hash(key) = a*key+b
- 我們可以查看到直接定址方法具有線性的特點,因此適用在關(guān)鍵字分布連續(xù)的情況
數(shù)學分析方法
- 方式:提取關(guān)鍵字中隨機性好的數(shù)字位,將其拼接為哈希地址
- 適用場景:關(guān)鍵字已知的情況下,對關(guān)鍵字中每一位進行取值情況分析
除留余數(shù)方法
- 公式:
hash(key) = key % p
- 除數(shù)采用取余模運算
2.3hash 算法過程
hash
函數(shù)接收到輸入的字符串,首先會先進行預(yù)處理-哈希計算-輸入摘要- 預(yù)處理:將字符串進行填充、分割N塊,為hash進行初始化
- 哈希計算:將預(yù)處理的數(shù)據(jù)完成指定算法生成消息摘要
- 每指定一種hash算法只會生成固定長度的摘要,長度越長的安全性越高
2.4hash 常用算法
MD5
MD5:message-Digest Algorithm 5 信息-摘要算法5,該算法用于信息完整性進行校驗
- 計算方式:求余、取余、調(diào)整長度、進行鏈接變量循環(huán)運算求出結(jié)果
- 用途:主要用于文件校驗
SHA-1
SHA:secure Hash Algorithm 安全散列算法1,是一種密碼散列算法,SHA-1可以生成摘要消息為40位的16進制即160位(20字節(jié))的散列值
- 用途:TSL、SSL、PGP、SSH等協(xié)議中廣泛使用
3. hashlib 屬性方法
hashlib 模塊相關(guān)屬性
屬性 | 作用 |
---|---|
hashlib.algorithms_guaranteed | 保證所有平臺上都支持哈希算法的名稱 |
hashlib.algorithms_available | 保證平臺上運行的Python解釋器上可用的hash算法的名稱 |
hashlib 構(gòu)造對象相關(guān)的屬性
屬性 | 作用 |
---|---|
hash.digest_size | 以字節(jié)表示哈希對象的大小 |
hash.block_size | 以字節(jié)表示哈希算法的內(nèi)部塊大小 |
hash.name | 哈希對象的名稱 |
hashlib 模塊相關(guān)方法目前可以支持主流hash算法。
方法 | 作用 |
---|---|
hashlib.pbkdf2_hmac(hash_name,password,salt,itera,dklen=None) | PKCS#5基于密碼的秘鑰派生函數(shù)2,作為HMAC作為偽隨機函數(shù) |
hashlib.scrypt(password,*,salt) | 基于密碼加密的秘鑰派生函數(shù) |
hashlib.md5() | md5加密方式 |
hashlib.sha1 | sha1加密方式 |
hashlib.sha256 | sha256加密方式 |
hashlib.blake2b () | blake2b加密方式 |
hashlib.blake2s | black2s加密方式 |
hashlib 構(gòu)造對象相關(guān)的方法
方法 | 作用 |
---|---|
hash.update(data) | 以字節(jié)表示哈希對象 |
hash.digest() | 返回當前已傳給update()方法的數(shù)據(jù)摘要 |
hash.hexdigest() | 以16進制的字符串表示哈希數(shù)據(jù)值 |
hash.copy() | 將hash對象復(fù)制,共享初始數(shù)據(jù)的摘要 |
4. 實操
我們學習hashlib模塊中對字符串進行hash算法處理,我們來實操一下吧
import hashlib text_md5 = hashlib.md5() text_md5.update(bytes("hello juejing",encoding="utf-8")) print("md5:",text_md5.hexdigest()) text_sha1 = hashlib.sha1() text_sha1.update(bytes("hello juejing",encoding="utf-8")) print("sha1:",text_sha1.hexdigest()) text_sha256 = hashlib.sha3_256() text_sha256.update(bytes("hello juejing",encoding="utf-8")) print("sha256:",text_sha256.hexdigest()) text_crc32 = hashlib.() text_sha256.update(bytes("hello juejing",encoding="utf-8")) print("sha256:",text_sha256.hexdigest())
?? 重要說明
- 添加自定義key與字符串進行組合加密(加鹽)
- 以MD5加密為例如下
加鹽寫法一:
text_md5 = hashlib.md5(b"key") text_md5.update("字符串".encode("utf-8"))
加鹽寫法二:
key = "字符串" yan = "字符串2" text_md5 = hashlib.md5() text_md5.upadte((key+yan).encode("utf-8"))
5、總結(jié)
本期,我們對hashlib模塊中hash算法特點、hashlib模塊相關(guān)支出算法的方法進行學習和實操。在hash算法中我們常用使用md5/sha1/sha256
主要用于文本校驗、用戶登錄認證等數(shù)據(jù)校驗同時,hash算法確保數(shù)據(jù)的完整性,具有不可逆性,同時它會遭遇到暴力碰撞,因此hash長度越長的安全性也越高。
到此這篇關(guān)于Python hashlib模塊興趣的文章就介紹到這了,更多相關(guān)Python hashlib模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas修改DataFrame列名的實現(xiàn)方法
這篇文章主要介紹了pandas修改DataFrame列名的實現(xiàn)方法, 文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-02-02python操作csv格式文件之csv.DictReader()方法
這篇文章主要介紹了python操作csv格式文件之csv.DictReader()方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06一篇文章帶你搞定Ubuntu中打開Pycharm總是卡頓崩潰
這篇文章主要介紹了一篇文章帶你搞定Ubuntu中打開Pycharm總是卡頓崩潰,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11tensorflow創(chuàng)建變量以及根據(jù)名稱查找變量
這篇文章主要為大家詳細介紹了tensorflow創(chuàng)建變量以及根據(jù)名稱查找變量,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03