使用Python進行MD5雜湊編碼?


所有IT公司都非常關注資料安全。有多種雜湊技術可以保護和檢查我們的資料。

什麼是雜湊?

雜湊是一種函式,它以可變長度的位元組序列作為輸入,並將其轉換為固定長度的序列。但是,要恢復原始資料(輸入位元組)並不容易。例如,x是你的輸入,f是雜湊函式,那麼計算f(x)又快又容易,但是再次獲得x則是一個非常耗時的工作。

雜湊函式的返回值稱為雜湊值、校驗和、雜湊值或訊息摘要。

我們可以總結如下:

假設你想將“Hello World”訊息轉換為md5雜湊函式,則結果為:

在現實生活中,雜湊函式廣泛用於密碼演算法、數字簽名、指紋、密碼儲存以及許多其他領域。作為Python程式設計師,我們需要雜湊函式來檢查資料或檔案的重複性,在透過公共網路傳輸資料時檢查資料完整性,在資料庫中儲存密碼等等。

兩種最常用的雜湊函式或演算法是:

  • MD5 - MD5或訊息摘要演算法將產生一個128位的雜湊值。md5演算法存在一些安全問題,這就是為什麼我們主要使用它來檢查資料完整性的原因。

  • SHA - SHA演算法組下有多種演算法,由美國聯邦資訊處理標準開發。這些演算法比md5安全得多,因此廣泛應用於包括密碼應用在內的多個領域。這些演算法生成的訊息長度從160位到512位不等。

MD5

Python標準庫包含一個名為hashlib的模組,其中包含大多數流行的雜湊演算法。大多數演算法都在hashlib模組中實現,但是,如果你安裝了OpenSSL,hashlib也可以用於處理這些演算法。

首先,如果你想使用任何雜湊演算法,請匯入hashlib模組:

import hashlib

現在,檢查hashlib模組中當前可用的所需演算法或所有演算法:

>>> print(hashlib.algorithms_available)
{'sha3_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'dsaEncryption', 'dsaWithSHA', 'DSA', 'md5', 'sha384', 'sha224', 'sha3_384', 'ecdsa-with-SHA1', 'DSA-SHA', 'SHA1', 'md4', 'SHA256', 'MD4', 'sha3_512', 'whirlpool', 'sha256', 'shake_256', 'SHA', 'RIPEMD160', 'shake_128', 'SHA512', 'ripemd160', 'SHA224', 'sha', 'blake2s', 'SHA384', 'MD5'}

透過hashlib模組提供的上述演算法列表包括透過OpenSSL的演算法。

但是,要檢查始終可用的演算法列表,我們可以透過algorithms_guaranteed來檢查。

>>> print(hashlib.algorithms_guaranteed)
{'sha3_512', 'sha256', 'sha3_256', 'shake_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'md5', 'shake_128', 'sha384', 'sha224', 'sha3_384', 'blake2s'}

讓我們使用md5演算法建立一個簡單的程式:

程式碼

線上演示

import hashlib
hash_obj = hashlib.md5(b'Hello, Python!')
print(hash_obj.hexdigest())

輸出

a0af7810eb5fcb84c730f851361de06a

上面的程式碼將“Hello, Python!”字串作為輸入,並列印該字串的十六進位制摘要。hexdigest返回表示雜湊值的十六進位制字串。

但是,如果你想要返回的位元組序列,則應該使用hash_obj.digest(),例如:

線上演示

import hashlib
hash_obj = hashlib.md5(b'Hello, Python!')
#To generate, sequence of bytes
print(hash_obj.digest())

輸出

b'\xa0\xafx\x10\xeb_\xcb\x84\xc70\xf8Q6\x1d\xe0j'

如果你注意到,我們在任何字串文字之前都使用了“b”,這是為了從字串生成位元組,因為雜湊函式只接受位元組序列作為引數。

如果你想從控制檯傳遞字串,不要忘記將字串編碼為位元組序列:

線上演示

import hashlib
mystring = input('Enter string to hash: ')
hash_obj = hashlib.md5(mystring.encode())
print(hash_obj.hexdigest())

輸出

Enter string to hash: Hello, TutorialsPoint
9a5d3fad65690dcf44adaec67226abe7

更新於:2020年6月30日

4K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.