使用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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP