2010-05-25 157 views
1

我一直在Python中進行一些編程(仍然是n00b),並且遇到了一些奇怪的問題。我製作了一個小程序來查找在命令行上傳遞給它的文件名的MD5散列。我使用了一個函數,我在SO上找到了here。當我用文件運行它時,我得到了一個散列「58a ... 113」。但是當我運行微軟的FCIV或\ Python26 \ Tools \ Scripts \中的md5sum.py時,我得到了不同的散列,「591 ... ae6」。在腳本中md5sum.py的實際哈希部分是Python和其他文件哈希之間的MD5哈希差異

m = md5.new() 
while 1: 
    data = fp.read(bufsize) 
    if not data: 
     break 
    m.update(data) 
out.write('%s %s\n' % (m.hexdigest(), filename)) 

這看起來功能上等同於在對方的回答中給出的函數的代碼...我缺少什麼? (這是我第一次張貼到計算器,請讓我知道如果我做錯了。)

+2

'fp'在哪裏創建?你打開它在ASCII模式而不是二進制? – FogleBird 2010-05-25 17:28:39

+0

啊哈!就是這樣。我沒有在程序的open()函數中指定模式參數,所以它默認爲文本模式。我將模式設置爲'rb',現在它返回正確的散列。謝謝! – Sam 2010-05-25 17:33:46

回答

8

在評論中已經解決了,但如果有人想給我點...;)

開放你的文件在二進制模式!

f = open(path, 'rb')