如何在Python中使用本机lib(即hashlib)迭代sha256,使用byte[]作为输入而不是十六进制字符串

2024-04-25 20:53:47 发布

您现在位置:Python中文网/ 问答频道 /正文

背景:我有一个迭代哈希算法,需要从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)的十六进制表示的哈希值,而不是原始摘要字节。所以,我得到了不同的输出。在


Tags: 字符串代码算法forraw字节updatehash
1条回答
网友
1楼 · 发布于 2024-04-25 20:53:47

更新哈希器将参数附加到前一个文本(Python docs)。相反,您应该在每次计算摘要时创建新的哈希器。在

import hashlib

# hash 1 time...
digest = hashlib.sha256(raw).digest()

# then hash 64k-1 times
for x in range(0, 64000-1):
  digest = hashlib.sha256(digest).digest()
print digest.encode("hex")

相关问题 更多 >