背景:我有一个迭代哈希算法,需要从Python脚本和javaweb应用程序中计算。在
Psuedo代码:
hash = sha256(raw)
for x=1 to 64000 hash = sha256(hash)
其中hash是长度为32的字节数组,而不是长度为64的十六进制字符串。在
我希望以字节为单位的原因是,虽然Python可以在每次迭代之间转换为十六进制字符串,并将处理时间控制在一秒钟之内,但是Java的字符串开销需要3秒。在
因此,Java代码如下所示:
^{pr2}$Python代码如下所示:
import hashlib
# hash 1 time...
hasher = hashlib.sha256()
hasher.update(raw)
digest = hasher.digest()
# then hash 64k-1 times
for x in range (0, 64000-1):
# expect digest is bytes and not hex string
hasher.update(digest)
digest = hasher.digest()
print digest.encode("hex")
Python结果计算第一个摘要(String)的十六进制表示的哈希值,而不是原始摘要字节。所以,我得到了不同的输出。在
更新哈希器将参数附加到前一个文本(Python docs)。相反,您应该在每次计算摘要时创建新的哈希器。在
相关问题 更多 >
编程相关推荐