2010-05-25 131 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')