【问题标题】:Python hashlib giving unexpected hash of some image filesPython hashlib 给出了一些图像文件的意外哈希
【发布时间】:2017-08-05 11:38:11
【问题描述】:

我正在尝试验证一堆文件的 md5 哈希值以应对编程挑战。大多数文件都正确验证(它们都应该)。但在某些 jpg、png 和 gif 文件上,我生成的哈希值不正确。使用 md5sum 检查终端中的文件会产生正确的哈希值。此代码显示了我如何获取 md5 哈希:

import hashlib
import urllib

urllib.urlretrieve("https://farm4.staticflickr.com/3199/3083395581_663a7aaf76_z.jpg", "TestFile.jpg")
fileBytes = open("TestFile.jpg", 'rb').read()

foundHash = hashlib.md5(fileBytes).hexdigest()

print "Found Hash: " + foundHash
print "Expected Hash: abab4dd9a83f5636c10f4937686a7993"

为什么没有生成正确的 md5?

【问题讨论】:

    标签: python hash md5


    【解决方案1】:

    使用 urllib.urlretrieve 检索图像与使用浏览器下载此图像时获得的文件不同。在命令行上检查 Python 下载的“TestFile.jpg”的哈希值,看看它不是预期的哈希值。

    检查您的 URL 的来源,并确保它符合 flickr API 的正确用法。

    【讨论】:

    • TestFile.jpg 没有相同的哈希值,但我不知道 flickr API。您是说可能是网站没有正确传递文件,还是我没有正确接收文件?
    • Flickr 正在返回(可能是动态创建的)640px 图像或 500px 图像,具体取决于 URL 请求的形成方式。对于快速修复,请使用另一个 Python 库下载您的图像,该图像获得 640px 版本,例如requests。要了解这个问题,您必须对 Flickr 如何决定返回任一图像大小进行一些研究——您需要了解 urlretrieve 请求与例如请求有何不同。向此 URL 发出 wget 请求。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2012-10-15
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多