我正在开发一个可靠的智能契约,在其中我需要评估两个级联bytes32的散列。我不需要连接bytes32,因为sha3函数支持多个参数,我将它用作:
sha3(first, second);第一和第二是bytes32。我想知道如何执行连接,以便在本地复制相同的散列结果,或者使用keccak-256散列函数的在线评估器。
发布于 2017-03-30 14:00:21
这些参数用字节表示,左填充到您传入的数据类型的最大长度的零,然后连在一起,没有任何类型的分隔符。
在Python中,给定两个十六进制编码的bytes32s加上一个名为first和second的0x,它看起来如下所示:
# keccak, change before upgrading pysha >= 3.10
from sha3 import sha3_256
from rlp.utils import decode_hex
my_hash = "0x" + sha3_256(
decode_hex(first[2:].zfill(64)) +
decode_hex(second[2:].zfill(64))
).hexdigest()decode_hex正在将十六进制转换成一个字节数组。
PS -- Solidity和pysha的现代版本,以及您所使用的任何语言中的相关库,现在都有了名为keccak或keccak256的keccak版本,因此对这些版本进行标准化可能更好。
https://ethereum.stackexchange.com/questions/13741
复制相似问题