正在为一个我正在攻读的密码学自学课程做作业(这门课我没有得到学分)。我需要在一个大文件上计算散列值,其中散列是逐块进行的。我现在遇到的难题是如何将文件分成这些块?我正在使用python,这是我非常陌生的。在
f = open('myfile', 'rb')
BLOCK_SIZE = 1024
m = Crypto.Hash.SHA256.new()
thisHash = ""
blocks = os.path.getsize('myfile') / BLOCK_SIZE #ignore partial last block for now
for i in Range(blocks):
b = f.read(BLOCK_SIZE)
thisHash = m.update(b.encode())
f.seek(block_size, os.SEEK_CUR)
我正确地处理这个问题吗?在m.update(b.encode())
行执行之前,代码似乎一直在运行。我不知道我是不是太离谱了,也不知道该怎么做才能让它成功。如有任何建议,我们将不胜感激。谢谢!在
(注意:正如您可能注意到的,这段代码目前并没有真正产生任何东西——我只是在搭建一些脚手架)
为了使这个示例正确工作,您必须做一些事情。以下是一些要点:
Crypto.Hash.SHA256.SHA256Hash.update()
(作为m.update()
调用)没有返回值。要从对象中提取一个人类可读的哈希值,.update()
多次,然后调用.hexdigest()
.update()
函数之前,不需要对二进制数据进行编码。只需传递包含数据块的字符串。在file.read()
高级。您不需要单独的.seek()
操作。在.read()
将返回一个空字符串,如果您已经命中EOF。这很好。随便拉一下那部分。在block_size
与BLOCK_SIZE
不是同一个变量。在做这些小小的调整,假设你有所有正确的进口,你就会走上正轨。在
另一种解决方案是先将文件分成块,然后逐块执行哈希
这将把文件分成1024字节的块
Note: last block size may be less than 1024 bytes
现在你可以做任何你想做的杂凑。在
相关问题 更多 >
编程相关推荐