我正在尝试创建一个名为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变成我可以使用的对象。
任何人都知道如何解决这个问题?请记住,我是新手。
答案 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'))