## md5算法簡介
1. **簡介**
MD5消息摘要算法(MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4算法。
2. **用途**
* **一致性驗證** 對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。
MD5可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
* **數字簽名** 對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。(數字證書)
* **安全訪問認證** 密碼加密存儲
## Python中使用md5加密字符串
MD5是hash算法的一種。
# 導入hash算法庫 import hashlib # 得到md5算法對象 hash_md5 = hashlib.md5() # 准備要計算md5的數據(bytes類型) data = '二進制數據'.encode('utf-8', errors='ignore') # 計算 hash_md5.update(data) # 獲取計算結果(16進制字符串,32位字符) md5_str = hash_md5.hexdigest() # 打印結果 print(md5_str) ``` 注意: md5算法在使用時,數據可以分多次傳遞給update方法。所以,如下代碼的結果,和上面相同: ```python # 導入hash算法庫 import hashlib # 得到md5算法對象 hash_md5 = hashlib.md5() # 准備要計算md5的數據(bytes類型),第一部分 data1 = '二進制'.encode('utf-8', errors='ignore') # 計算第一部分數據 hash_md5.update(data1) # 准備要計算md5的數據(bytes類型),第二部分 data2 = '數據'.encode('utf-8', errors='ignore') # 計算第一部分數據 hash_md5.update(data2) # 獲取計算結果(16進制字符串,32位字符) md5_str = hash_md5.hexdigest() # 打印結果 print(md5_str) ``` ## Python中使用md5算法獲取文件MD5摘要 ```python # 導入hash算法庫 import hashlib def file_md5sum(file_path): '''計算文件md5值''' # 得到md5算法對象 hash_md5 = hashlib.md5() # 文件分塊讀取 chunk_size = 4096 # 4096 字節(4KB) # 以二進制方式讀文件 with open(file_path, "rb") as f: # 獲取分塊數據(bytes),一次讀取 chunk_size 個字節 chunk = f.read(chunk_size) # 如果能讀取到內容,就一直讀取 while bool(chunk): # 應用MD5算法,計算 hash_md5.update(chunk) # 繼續讀 chunk = f.read(chunk_size) # 返回計算結果(16進制字符串,32位字符) return hash_md5.hexdigest() file_path = r'你的文件路徑' # 改成自己的文件路徑 file_md5_str = file_md5sum(file_path) # 計算給定路徑的文件的md5 # 打印文件md5值 print(file_md5_str) # 打印文件md5值(大寫) print(file_md5_str.upper())