**:
好久沒有寫隨筆了,正好這兩天可以休整一下,藉此機會總結下最近使用python的小體會。
1當然在python當中也有對應的模組可以實現此功能,在python2.5之前可以使用 md5 模組,但是在python2.5以後就推薦使用 hashlib 來代替 md5 模組了。最簡單的實現**如下:$ md5sum filename
2 21c7ee192e64569ce43cfb869bdb2755 filename
1竹風覺得有兩個地方值得注意:#!/usr/bin/env python2#
coding : utf-834
import
sys5
import
hashlib67
defmd5sum(filename):
8 file_object = open(filename, 'rb'
)9 file_content =file_object.read()
10file_object.close()
11 file_md5 =hashlib.md5(file_content)
12return
file_md5
1314
if__name__ == "
__main__":
15 file_md5 = md5sum(sys.argv[1])
16print file_md5.hexdigest()
乙個是傳入 hashlib.md5() 的應該是 file_object.read() ,這樣才是對檔案內容產生md5校驗碼,竹風剛開始就是沒有使用 read() 方法,而是傳入filename(這樣的md5是對檔名生成的),導致產生的校驗碼不對;
另外乙個地方是,呼叫了 hashlib.md5() 後返回的是乙個物件,想要獲得 linux 下 md5sum 同樣的效果,還要呼叫一下 hexdigest() 方法。
當然,上面的**考慮得不夠周全。如果要對乙個比較大的檔案進行校驗,將會把檔案內容一次讀入記憶體,造成效能上的缺陷。個人比較推薦從提供的**,**如下:
1這段**就足夠強大了,每次讀入8k的內容,然後呼叫 update() ,來更新md5。#!/usr/bin/env python2#
coding : utf-8
3import
hashlib45
defmd5hex(word):
6"""
md5加密演算法,返回32位小寫16進製制符號
7"""8if
isinstance(word, unicode):
9 word = word.encode("
utf-8")
10elif
notisinstance(word, str):
11 word =str(word)
12 m =hashlib.md5()
13m.update(word)
14return
m.hexdigest()
1516
defmd5sum(fname):
17"""
計算檔案的md5值
18"""
19def
read_chunks(fh):
20fh.seek(0)
21 chunk = fh.read(8096)
22while
chunk:
23yield
chunk
24 chunk = fh.read(8096)
25else: #
最後要將游標放回檔案開頭
26fh.seek(0)
27 m =hashlib.md5()
28if
isinstance(fname, basestring) \
29and
os.path.exists(fname):
30 with open(fname, "rb"
) as fh:
31for chunk in
read_chunks(fh):
32m.update(chunk)33#
上傳的檔案快取 或 已開啟的檔案流
34elif fname.__class__.__name__
in ["
stringio
", "
stringo
"] \
35or
isinstance(fname, file):
36for chunk in
read_chunks(fname):
37m.update(chunk)
38else:39
return
""40
return m.hexdigest()
ps:至於為什麼是8k?這個就涉及到了io大小方面的內容了。提供一篇文章,有興趣的可以看看了解下:
檔案MD5校驗
1.什麼是md5 md5訊息摘要演算法 英語 md5 message digest algorithm 一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位 16位元組 的雜湊值 hash value 用於確保資訊傳輸完整一致。md5由美國密碼學家羅納德 李維斯特 ronald linn rives...
Python實現檔案md5校驗
linux下校驗檔案md5值,最簡單的方法就是執行md5sum命令 md5sum filename 原本打算用subprocess呼叫系統命令來獲取md5值,python view plain copy print?import subprocess,shlex cmd md5sum filenam...
md5檔案校驗linux系統檔案是否被更改
linux系統檔案是否被更改,可以使用md5sum來檢測一下。ls first.txt group passwd second.txt third.txt pwd mnt tt md5sum mnt tt opt md5 res.txt 將tt目錄下的檔案做md5校驗,資料存放到乙個檔案 1 如果t...