Jor*_*nal 5 abi sha256 blockchain ethereum solidity
我正在尝试在 Solidity 合同中实现签名,但在比较哈希时遇到了问题。我使用以下代码计算哈希值:
sha256(abi.encodePacked(param1, ...., paramN);
Run Code Online (Sandbox Code Playgroud)
在哪里:
abi.encodePacked(param1, ..., paramN) = [bytes: 0x0102030405060701]
和
sha255(abi.encodePacked(param1, ..., paramN)) = [bytes32:
0x245138c905599c8579ab186fbdbd6e62396aac35a98a6568f8803eed049d1251]
我在的主要问题是,通过使用Python的SHA256 0102030405060701我得到的结果是5bc31e3decf480124c79c114744d111ec82b62e466a097c3ced6fe76cbace9a5。
我究竟做错了什么?
问题是您正在对字符串“0102030405060701”进行散列,但您应该对十六进制值表示的字节进行散列:
>>> import hashlib
>>> import binascii
>>> hashlib.sha256(b'0102030405060701').hexdigest()
'5bc31e3decf480124c79c114744d111ec82b62e466a097c3ced6fe76cbace9a5'
>>> hashlib.sha256(binascii.unhexlify('0102030405060701')).hexdigest()
'245138c905599c8579ab186fbdbd6e62396aac35a98a6568f8803eed049d1251'
Run Code Online (Sandbox Code Playgroud)
请注意,对字符串进行哈希处理会产生与您在问题中提到的相同(不正确)的值,但首先通过转换为二进制会产生unhexlify
正确的结果,与您在 Solidity 中获得的结果相匹配。
归档时间: |
|
查看次数: |
3372 次 |
最近记录: |