iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

養爬蟲的人學爬蟲系列 第 22

【Day 22】認識並實作哈希值(hashlib模組)

  • 分享至 

  • xImage
  •  

閒聊
在前兩天進行了Dcard的爬蟲後,我們今天暫時緩和一下,來認識一個Python的模組-hashlib模組。

什麼是habshlib模組
habshlib模組是Python內建的模組,這個模組可以提供演算法將數據或資料轉成一個庫定的長度值(Hash Value)。
這個值通常稱為雜湊值或是哈希值,又被稱為「散列」。
常見的Hash Vaule這裡舉兩個例子:

  • MD5(Message-Digest Algorithm 5)
    稱為「訊息摘要演算法」,是一個被廣泛使用的密碼哈希函數。
    概念:是將一個數據轉換定產生一個hash value。
    演算法:ms5()

  • SHA1(Secure Hash Aogorithm)
    稱為「安全哈希演算法」,是SHA家族的其中一個演算法。
    常被應用在數位簽章中。
    演算法:sha1()

哈希演算法特徵

  • 正向快速:給定原文Hash時,可在有限時間、資源內給出哈希值(hash value)。
  • 逆向困難:給定hash value,無法在有限時間內逆推原文。這也是哈希安全性的基礎。
  • 輸入敏感:原文輸入信息發生任何改變,新的hash value都應該發生變化。
  • 避免碰撞:難找到兩段不同的原文,使hash vaule一致(即碰撞)。

計算中英文資料Hash vaule

  • md5():建立md5()方法物件。
  • sha1():建立sha1()方法物件。
  • updata():更新數據文件內容。
  • digest():將數據文件轉為hash vaule。
  • hexdigest():將數據文件轉為時溜進位的hash vaule。

實作

#列出英文字串hash vaule

import hashlib
data1 = hashlib.md5() #建立md5()物件
daa.update('Teresa') #更新物件內容

print(data.digest()) #印出hash value
#列出中文字串hash vaule

import hashlib
data1 = hashlib.md5() #建立md5()物件
Hi = '你好'
data1.update(Hi.encode('utf-8')) #對中文字串進行編碼

print(data1.digest()) #印出hash value
#計算檔案的hash vaule

import hashlib
data2 = hashlib.md5()
file = 'data2.text'

with open(file,"rb") as fn : #以二進位制讀取檔案
    btxt = fn.read()
    data.update(btxt)

print(data2.digest())
#使用algoeithms_available屬性列出目前作業平台使用的哈希演算法

import hashlib
print(hash.algoeithms_available)

#使用algoeithms_quaranteed屬性列出跨作業系統平台使用的哈希演算法

import hashlib
print(hash.algoeithms_quaranteed)

結語
今天很開心又多認識了一個Python內建的模組,原來Hash value不只用在資料結構與演算法的課堂上,還可以用在很多地方。
明天要繼續來爬蟲了!

明天!
【Day 23】不用帳號密碼也可以登錄Instagram嗎?(實戰Selenium 1/2)

參考資料
什麼是哈希算法,如何計算?https://www.panewslab.com/zh_hk/articledetails/N6238399.html


上一篇
【Day 21】在Dcard上自動向下捲動吧!(實戰Selenium 1/2)
下一篇
【Day 23】不用帳號密碼也可以登錄Instagram嗎?(實戰Selenium 1/2)
系列文
養爬蟲的人學爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言