我需要一个Python/C/C++/Java实现,它可以暂停散列进度并将进度存储在文件中,以便在稍后阶段从该文件中恢复进度。
不管上面列出的是用什么语言编写的,它都应该在Python中正常工作。建议您可以提供它,以便与“hashlib”一起工作,但这不是必要的。此外,如果这样的东西已经存在,一个链接就足够了。
对于一个想法,你的实现应该实现什么。
import hashlib
import hashpersist #THIS IS NEEDED.
sha256 = hashlib.sha256("Hello ")
hashpersist.save_state(sha256, open('test_file', 'w'))
sha256_recovered = hashpersist.load_state(open('test_file', 'r'))
sha256_recovered.update("World")
print sha256_recovered.hexdigest()
这应该给予与我们使用标准sha 256函数对“Hello World”进行简单散列相同的输出。
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
2条答案
按热度按时间6mzjoqzu1#
事实证明,重写hashlib以使其可恢复比我想象的要容易,至少SHA-256部分是这样。我花了一些时间玩使用OpenSSL加密库的C代码,但后来我意识到我不需要所有这些东西,我可以使用ctypes。
rehash.py
可恢复_SHA-256.py
demo
输出
编辑
我刚刚做了一个小的编辑,使
rehash
也能在Windows上工作,尽管我只在WinXP上测试过它。libeay32.dll
可以在当前目录中,也可以在系统库搜索路径中的某个位置,例如WINDOWS\system32
。我的相当古老的(而且大多数未使用的)XP安装无法找到.dll,即使它被OpenOffice和Avira使用。所以我只是把它从Avira文件夹复制到system32。现在它完美地工作了。:)e4yzc0pl2#
一个支持导入/导出到python dict的纯python:https://pypi.org/project/sha256bit/
演示:
state
是一个可以持久化的常规python dict。