Python實現檔案md5校驗

2021-08-08 09:29:37 字數 2767 閱讀 5853

linux下校驗檔案md5值,最簡單的方法就是執行md5sum命令

md5sum filename

原本打算用subprocess呼叫系統命令來獲取md5值,

[python]view plain

copy

print?

import

subprocess,shlex  

cmd = "md5sum filename"

p = subprocess(shlex.split(cmd), stdout=subprocess.pipe)  

print

p.stdout.read()  

不過python有自帶的md5模組hashlib,用起來簡單很多,

python hashlib模組的使用說明 

fd = hashlib.md5() #獲取乙個md5加密演算法物件

fd.update("string") #指定需要加密的字串

fd.hexdigest() #獲取加密後的16進製制字串

例項[python]view plain

copy

print?

#!/usr/bin/env python           

#coding : utf-8 3  4 import sys 

import

hashlib                    

defmd5sum(filename):             

fd = open(filename,"r"

)  fcont = fd.r  

fd.close()           

fmd5 = hashlib.md5(fcont)  

return

fmd5               

if__name__ == 

"__main__"

:        

fmd5 = md5sum(sys.argv[1

])  

print

fmd5.hexdigest()    

其中fmd5 = hashlib.md5(fcont)等同於

fmd5 = hashlib.md5(fcont)

fmd5.update(fcont)

需要注意的是,傳入 hashlib.md5() 的應該是 檔案內容而不是檔名,這樣才是對檔案內容產生md5校驗碼;

另外,呼叫了 hashlib.md5() 後返回的是乙個物件,想要獲得linux下 md5sum 同樣的效果,還要呼叫一下 hexdigest() 方法。

但是,這個方法有點過於粗暴,當檢驗大檔案時,一次將所有檔案內容讀入記憶體,實在耗費較大,

網上給出例項

根據檔案塊長度,依次獲取檔案內容讀入記憶體,通過update()逐次更新校驗值,

[python]view plain

copy

print?

#!/usr/bin/env python 2

#coding : utf-8 3 import hashlib

defmd5hex(word):  

""" md5加密演算法,返回32位小寫16進製制符號

"""if

isinstance(word, unicode):  

word = word.encode("utf-8"

)  elif

notisinstance(word, str):  

word = str(word)  

m = hashlib.md5()  

m.update(word)  

return

m.hexdigest()  

defmd5sum(fname):  

""" 計算檔案的md5值

"""def

read_chunks(fh):  

fh.seek(0

)  chunk = fh.read(8096

)  while

chunk:  

yield

chunk  

chunk = fh.read(8096

)  else

: #最後要將游標放回檔案開頭

fh.seek(0

)  m = hashlib.md5()  

ifisinstance(fname, basestring) \  

andos.path.exists(fname):  

with open(fname, "rb"

) as fh:  

forchunk 

inread_chunks(fh):  

m.update(chunk)  

#上傳的檔案快取 或 已開啟的檔案流

elif

fname.__class__.__name__ in[

"stringio"

, "stringo"

] \  

orisinstance(fname, file):  

forchunk 

inread_chunks(fname):  

m.update(chunk)  

else

:  return

""40

return

m.hexdigest()  

檔案MD5校驗

1.什麼是md5 md5訊息摘要演算法 英語 md5 message digest algorithm 一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位 16位元組 的雜湊值 hash value 用於確保資訊傳輸完整一致。md5由美國密碼學家羅納德 李維斯特 ronald linn rives...

Linux中檔案MD5校驗

md5sum命令用於生成檔案的md5數字摘要,並可以驗證檔案內容是否發生了改變,間接地還可以檢驗兩個檔案內容是否完全相同。因為md5sum是讀取檔案內容來計算校驗碼的,因此只能驗證檔案內容,而無法驗證檔案屬性。root xuexi cp a etc fstab tmp fstab root xuex...

Linux中檔案MD5校驗

md5sum命令用於生成檔案的md5數字摘要,並可以驗證檔案內容是否發生了改變,間接地還可以檢驗兩個檔案內容是否完全相同。因為md5sum是讀取檔案內容來計算校驗碼的,因此只能驗證檔案內容,而無法驗證檔案屬性。root xuexi cp a etc fstab tmp fstab root xuex...