【问题标题】:Different SHA1 but same SHA256 [duplicate]不同的 SHA1 但相同的 SHA256 [重复]
【发布时间】:2017-08-24 10:23:38
【问题描述】:

我正在遍历包含二进制文件的文件夹,并尝试计算每个文件的哈希值,特别是 sha1 和 sha256。在我的运行中,我奇怪地为所有文件获得了相同的 sha256 值,但 sha1 值不同(因此正确)。

以下是输出文件的屏幕截图,显示 sha1 哈希已正确完成。但 sha256 不是。 (对不起每个二进制文件的文件名也是它的sha1)

我的流程有问题吗?这是Python中的相关代码。我没有看到任何东西。对不起。

out.write("FILENAME,SHA1,SHA256\n")
for root, dirs, files in os.walk(input_path):
    for ffile in files:
        myfile = os.path.join(root, ffile)
        nice = os.path.join(os.getcwd(), myfile)

        fo = open(nice, "rb")
        a = hashlib.sha1(fo.read())
        b = hashlib.sha256(fo.read())
        paylname = os.path.basename(myfile)
        mysha1 = str(a.hexdigest())
        mysha256 = str(b.hexdigest())
        fo.close()

        out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256))

【问题讨论】:

  • fo.read() 已经读取了文件的内容后,你认为它会读取什么?
  • 当您对 sha1 哈希执行 fo.read() 时,您已经读取了整个文件,但您从未将光标移回文件的开头。所以 sha256 哈希的输入总是相同的(什么都没有)
  • hashlib.sha256(b'').hexdigest() == 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
  • 啊啊。我多么天真。感谢您的捕获!我会尽快接受你的回答

标签: python sha1 sha256 hashlib


【解决方案1】:

正如我在上面的评论中所说,您正在读取整个文件以获取第一个哈希值,但您需要返回文件的开头以第二次读取它以获取第二个哈希值。或者,您可以将其存储在一个变量中,并将其传递给每个哈希。

out.write("FILENAME,SHA1,SHA256\n")
for root, dirs, files in os.walk(input_path):
    for ffile in files:
        myfile = os.path.join(root, ffile)
        nice = os.path.join(os.getcwd(), myfile)

        fo = open(nice, "rb")
        a = hashlib.sha1(fo.read())
        fo.seek(0,0) # seek back to start of file
        b = hashlib.sha256(fo.read())
        paylname = os.path.basename(myfile)
        mysha1 = str(a.hexdigest())
        mysha256 = str(b.hexdigest())
        fo.close()

        out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多