如何从Python中的.txt文件生成checksum.dat哈希文件

时间:2014-10-18 13:20:26

标签: python file text hash checksum

我正在尝试创建一个名为checksum.dat的文件,其中包含Python中名为index.txt的文件的SHA256哈希值。

到目前为止我想出了什么:

import hashlib
with open("index.txt", "rb") as file3:
    with open("checksum.dat", "wb") as file4:
        file_checksum = hashlib.sha256()
        file_checksum.update(file3)
        file_checksum.digest()

        print(file_checksum)
        file4.write(file_checksum)

我希望它将哈希打印到控制台中,并将其写入checksum.dat文件。

但我得到的只是这个错误:

File "...", line 97, in main
file_checksum.update(file3)
TypeError: object supporting the buffer API required

到目前为止我用google搜索的是,你不能从字符串中创建一个哈希值,从我的理解,只能从字节对象或其他东西。不知道如何将我的index.txt变成我可以使用的对象。

任何人都知道如何解决这个问题?请记住,我是新手。

1 个答案:

答案 0 :(得分:0)

您必须提供index.txt的内容,因此问题在于:

file_checksum.update(file3)

file3是指向index.txt文件的文件指针,它没有文件的内容。要获取内容,请执行read()。所以下面应该解决它:

file_checksum.update(file3.read())

因此,您的完整代码将是:

import hashlib
with open("index.txt", "rb") as file3:
        file_checksum = hashlib.sha256()
        for line in file3:
            file_checksum.update(line)
            file_checksum.hexdigest()
        print(file_checksum.hexdigest())

with open("checksum.dat", "wb") as file4:        
        file4.write(bytes(file_checksum.hexdigest(), 'UTF-8'))