Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法。
什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(如MD5值共32位,且每位都是用16進制進行表示)。
摘要算法就是通過摘要函數對任意長度的數據data計算出固定長度的摘要digest,目的是為了發現原始數據是否被人篡改過。
摘要算法之所以能指出數據是否被篡改過,就是因為摘要函數是一個單向函數,計算digest很容易,但通過digest反推數據data卻非常困難,並且對原始數據做出任意的修改都會導致計算出的digest完全不同。
綜上所述,只要是一個完整且未被修改過的文件,它的MD5值或者其他算法值都是固定不變的,一旦計算出數值與原作者給出的數值不同,就要當心此文件的安全性了。
那么,利用python怎么計算一個文件的MD5值呢?以下是簡寫代碼:
1 import hashlib #導入hashlib模塊 2 def match(file_path,Bytes=1024): 3 md5_1 = hashlib.md5() #創建一個md5算法對象 4 with open(file_path,'rb') as f: #打開一個文件,必須是'rb'模式打開 5 while 1: 6 data =f.read(Bytes) #由於是一個文件,每次只讀取固定字節 7 if data: #當讀取內容不為空時對讀取內容進行update 8 md5_1.update(data) 9 else: #當整個文件讀完之后停止update 10 break 11 ret = md5_1.hexdigest() #獲取這個文件的MD5值 12 return ret 13 14 15 print(match(r'E:\紅軍不怕遠征難\我與波多野結衣小姐姐的同居生活.avi'))
