前言
在互聯網的時代,我們在網絡中傳輸過程中都是要經過加密的,常見網絡數據傳輸的加密方式有MD5和RSA算法。當然,加密算法還有很多中按加密、解密方式不同分為:對稱加密、非對稱加密、hash加密。其中MD5算法的基礎是使用的hash算法,針對不同安全的hash安全算法,Python也提一個通用接口hashlib模塊。
1. hashlib 模塊概述
hashlib 是Python 內置用于對安全哈希和消息摘要的通用接口模塊。hashlib 模塊支持提供目前主流hash算法如MD5、SHA-1、SHA-2、SHA-256等通用構造方法,并且返回帶有同樣接口的hash對象。
1.1hashlib 模塊特點
- 提供主流的hash算法操作,替代md5模塊和sha模塊
- 模塊調用簡單,無需下載安裝
- 主要應用在文本加密場景如用戶登錄認證
1.2hashlib 模塊使用步驟
- 導入hashlib庫:import hashlib
- 建立加密對象
- 對字符串進行加密處理
- 獲取轉換成新的N個Bit
2. hashlib 工作原理
hashlib 模塊中加密方式是我們常見的hash算法。hash算法又稱為散列表(hash table),也叫做哈希表。
2.1hash 算法特點
- 具有唯一確定性,不同字符串加密后都是不一樣的
- 不可逆性,hash只有加密沒有解密過程
- 散列碰撞,輸出和輸入值不是一一對應關系
2.2hash 構造方法
直接定址方法
- 公式一:hash(key) = key
- 公式二:hash(key) = a*key+b
- 我們可以查看到直接定址方法具有線性的特點,因此適用在關鍵字分布連續的情況
數學分析方法
- 方式:提取關鍵字中隨機性好的數字位,將其拼接為哈希地址
- 適用場景:關鍵字已知的情況下,對關鍵字中每一位進行取值情況分析
除留余數方法
- 公式:hash(key) = key % p
- 除數采用取余模運算
2.3hash 算法過程
- hash 函數接收到輸入的字符串,首先會先進行預處理-哈希計算-輸入摘要
- 預處理:將字符串進行填充、分割N塊,為hash進行初始化
- 哈希計算:將預處理的數據完成指定算法生成消息摘要
- 每指定一種hash算法只會生成固定長度的摘要,長度越長的安全性越高
2.4hash 常用算法
MD5
MD5:message-Digest Algorithm 5 信息-摘要算法5,該算法用于信息完整性進行校驗
- 計算方式:求余、取余、調整長度、進行鏈接變量循環運算求出結果
- 用途:主要用于文件校驗
SHA-1
SHA:secure Hash Algorithm 安全散列算法1,是一種密碼散列算法,SHA-1可以生成摘要消息為40位的16進制即160位(20字節)的散列值
- 用途:TSL、SSL、PGP、SSH等協議中廣泛使用
3. hashlib 屬性方法
hashlib 模塊相關屬性
屬性 | 作用 |
---|---|
hashlib.algorithms_guaranteed | 保證所有平臺上都支持哈希算法的名稱 |
hashlib.algorithms_available | 保證平臺上運行的Python解釋器上可用的hash算法的名稱 |
hashlib 構造對象相關的屬性
屬性 | 作用 |
---|---|
hash.digest_size | 以字節表示哈希對象的大小 |
hash.block_size | 以字節表示哈希算法的內部塊大小 |
hash.name | 哈希對象的名稱 |
hashlib 模塊相關方法目前可以支持主流hash算法。
方法 | 作用 |
---|---|
hashlib.pbkdf2_hmac(hash_name,password,salt,itera,dklen=None) | PKCS#5基于密碼的秘鑰派生函數2,作為HMAC作為偽隨機函數 |
hashlib.scrypt(password,*,salt) | 基于密碼加密的秘鑰派生函數 |
hashlib.md5() | md5加密方式 |
hashlib.sha1 | sha1加密方式 |
hashlib.sha256 | sha256加密方式 |
hashlib.blake2b () | blake2b加密方式 |
hashlib.blake2s | black2s加密方式 |
hashlib 構造對象相關的方法
方法 | 作用 |
---|---|
hash.update(data) | 以字節表示哈希對象 |
hash.digest() | 返回當前已傳給update()方法的數據摘要 |
hash.hexdigest() | 以16進制的字符串表示哈希數據值 |
hash.copy() | 將hash對象復制,共享初始數據的摘要 |
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、總結
本期,我們對hashlib模塊中hash算法特點、hashlib模塊相關支出算法的方法進行學習和實操。在hash算法中我們常用使用md5/sha1/sha256主要用于文本校驗、用戶登錄認證等數據校驗同時,hash算法確保數據的完整性,具有不可逆性,同時它會遭遇到暴力碰撞,因此hash長度越長的安全性也越高。
到此這篇關于Python hashlib模塊興趣的文章就介紹到這了,更多相關Python hashlib模塊內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7026328231854735373