在本文中,您將學(xué)習(xí)查找文件的哈希值并顯示它。
要理解此示例,您應(yīng)該了解以下Python編程主題:
散列函數(shù)獲取任意數(shù)量的數(shù)據(jù),并返回固定長度的位字符串。函數(shù)的輸出稱為摘要消息。
它們被廣泛用于密碼學(xué)中以進(jìn)行認(rèn)證。有許多哈希函數(shù),例如MD5,SHA-1等。請參考此頁面,以了解有關(guān)密碼學(xué)中哈希函數(shù)的更多信息。
在此示例中,我們將說明如何對文件進(jìn)行哈希處理。我們將使用SHA-1哈希算法。SHA-1的摘要的長度為160位。
我們不會一次全部提供文件中的數(shù)據(jù),因?yàn)槟承┪募浅4?,無法一次全部放入內(nèi)存中。將文件分成小塊將提高進(jìn)程內(nèi)存的效率。
# Python程序來查找文件的SHA1消息摘要 # 導(dǎo)入hashlib模塊 import hashlib def hash_file(filename): """"此函數(shù)返回SHA-1哈希 傳遞給它的文件""" # 創(chuàng)建一個哈希對象 h = hashlib.sha1() # 打開文件以二進(jìn)制模式讀取 with open(filename,'rb') as file: # 循環(huán)直到文件末尾 chunk = 0 while chunk != b'': # 一次只讀取1024個字節(jié) chunk = file.read(1024) h.update(chunk) # 返回摘要的十六進(jìn)制表示形式 return h.hexdigest() message = hash_file("track1.mp3") print(message)
輸出結(jié)果
633d7356947eec543c50b76a1852f92427f4dca9
在此程序中,我們以二進(jìn)制模式打開文件。散列函數(shù)在hashlib模塊中可用。我們使用while循環(huán)直到文件末尾。到達(dá)最后時,我們得到空字節(jié)對象。
在每次迭代中,我們僅從文件中讀取1024個字節(jié)(可以根據(jù)需要更改此值),并更新哈希函數(shù)。
最后,我們使用hexdigest()方法以十六進(jìn)制表示形式返回摘要消息。