我正在使用stackoverflow上找到的以下代码,该代码建议是获取文本文件内容的md5哈希值并与从http://www.miraclesalad.com/webtools/md5.php获得的生成的md5哈希值进行比较的有效方法
但是。。它没有返回相同的md5哈希值,我不确定哪里出了问题。文件内容与我用来生成md5散列的文本完全匹配,因此它应该匹配,但是它没有返回相同的匹配。在
基本上,我想生成一些文本的md5散列,并将其与文本文件的内容进行比较,看看是否匹配。在
def md5Checksum(filePath):
with open(filePath, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
如果我创建一个包含“test”内容的文本文件,同时转到http://www.miraclesalad.com/webtools/md5.php并输入“test”并生成一个哈希,那么比较一下这两者都是不同的。在
不管文件的内容如何,我返回的哈希值总是相同的。在
比较哈希的代码
^{pr2}$我试过打印数据,两个数据也完全一样。在
来自网站的test
的哈希:098f6bc4621d373cade4e832627b4f6
内容为test
d41d8cd98f00b204e980998ecf8427e的文本文件的哈希
更新
多亏了亚当·斯密才解决了这个问题。在
这是一个识别错误,因此没有返回更新的hashlib。在
你确定你的尺寸参数足够大吗(我无法想象它不会,但值得检查)?当我用一个简单的值测试上面的代码并与标准MD5散列(使用miraclesalar或其他方法)进行比较时,我得到了一个正确的响应。回车或特殊字符也会引起一些关注。在
在web生成器和Python中,只有
test
(后面没有空行)的文本,我得到的MD5哈希为:如果在之后添加回车符/新行(\n),则会得到:
^{pr2}$这种差异是由回车/换行类型造成的。DOS/Windows
('\r\n')
——Linux('\n')
http://www.cs.toronto.edu/~krueger/csc209h/tut/line-endings.html
问题可能出在新线上。如果文件以新行
"test\n"
结尾,MD5哈希将是d8e8fca2dc0f896fd7cb4cb0031ba249
。在无论您是在Windows还是Unix系统上,行尾也可能不同。在
相关问题 更多 >
编程相关推荐