不同的SHA1但SHA256相同

时间:2017-08-24 10:23:39

标签: python sha1 sha256 hashlib

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

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

wat is dis

我的流程有问题吗?这是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))

1 个答案:

答案 0 :(得分: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))