Python:哈希函数始终为任何文件生成相同(空)的哈希
Python: Hash function always produces same (empty) hash for any file
所以我进行了大量的谷歌搜索,但无法真正找到我的问题的答案。
我试图制作一个函数来散列更大的文件,并且我制作了两个不同的函数,但对于我散列的任何文件,这两个函数似乎都产生相同的输出,准确地说:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
我知道这是一个空字节字符串的 SHA256 哈希值。
我尝试使用的两种解决方案是:
from hashlib import sha256 as hashfun
bs = 1048576 # I'll just use 1024kb chunks as an example
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
for chunk in iter(lambda: f.read(bs), b''):
hashfun().update(chunk)
print(hashfun().hexdigest())
和
from hashlib import sha256 as hashfun
bs = 1048576
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
while True:
data = f.read(bs)
if not data:
break
hashfun().update(data)
print(hashfun().hexdigest())
这些似乎都不起作用。
我知道文件不是问题,因为之前没有块读取的简单函数有效:
from hashlib import sha256 as hashfun
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
rbytes = f.read()
readable_hash = hashfun(rbytes).hexdigest()
print(readable_hash)
有什么非常明显的地方我做错了吗(可能是哈哈)?
提前致谢!
代码是重复调用哈希构造函数,而不是创建单个哈希实例并更新它。
这应该有效:
from hashlib import sha256 as hashfun
bs = 1048576 # I'll just use 1024kb chunks as an example
selectfile = "/PATH/TO/FILE"
hash_ = hashfun()
with open(selectfile, 'rb') as f:
for chunk in iter(lambda: f.read(bs), b''):
hash_.update(chunk)
print(hash_.hexdigest())
所以我进行了大量的谷歌搜索,但无法真正找到我的问题的答案。 我试图制作一个函数来散列更大的文件,并且我制作了两个不同的函数,但对于我散列的任何文件,这两个函数似乎都产生相同的输出,准确地说:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
我知道这是一个空字节字符串的 SHA256 哈希值。
我尝试使用的两种解决方案是:
from hashlib import sha256 as hashfun
bs = 1048576 # I'll just use 1024kb chunks as an example
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
for chunk in iter(lambda: f.read(bs), b''):
hashfun().update(chunk)
print(hashfun().hexdigest())
和
from hashlib import sha256 as hashfun
bs = 1048576
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
while True:
data = f.read(bs)
if not data:
break
hashfun().update(data)
print(hashfun().hexdigest())
这些似乎都不起作用。 我知道文件不是问题,因为之前没有块读取的简单函数有效:
from hashlib import sha256 as hashfun
selectfile = "/PATH/TO/FILE"
with open(selectfile, 'rb') as f:
rbytes = f.read()
readable_hash = hashfun(rbytes).hexdigest()
print(readable_hash)
有什么非常明显的地方我做错了吗(可能是哈哈)? 提前致谢!
代码是重复调用哈希构造函数,而不是创建单个哈希实例并更新它。
这应该有效:
from hashlib import sha256 as hashfun
bs = 1048576 # I'll just use 1024kb chunks as an example
selectfile = "/PATH/TO/FILE"
hash_ = hashfun()
with open(selectfile, 'rb') as f:
for chunk in iter(lambda: f.read(bs), b''):
hash_.update(chunk)
print(hash_.hexdigest())