繁体   English   中英

abi.encodePacked(...)和sha256(..)如何在Solidity中工作?

[英]How does abi.encodePacked(…) and sha256(..) work in Solidity?

我正在尝试在Solidity合同中实现签名,并且在比较哈希时我遇到了问题。 我用以下代码计算哈希值:

sha256(abi.encodePacked(param1, ...., paramN);

哪里:

abi.encodePacked(param1, ..., paramN) = [bytes: 0x0102030405060701]

sha255(abi.encodePacked(param1, ..., paramN)) = [bytes32: 0x245138c905599c8579ab186fbdbd6e62396aac35a98a6568f8803eed049d1251]

我遇到的主要问题是,通过在0102030405060701上使用python sha256,我得到的结果是5bc31e3decf480124c79c114744d111ec82b62e466a097c3ced6fe76cbace9a5

我究竟做错了什么?

问题是您正在散列字符串“0102030405060701”,但您应该散列十六进制值表示的字节:

>>> import hashlib
>>> import binascii
>>> hashlib.sha256(b'0102030405060701').hexdigest()
'5bc31e3decf480124c79c114744d111ec82b62e466a097c3ced6fe76cbace9a5'
>>> hashlib.sha256(binascii.unhexlify('0102030405060701')).hexdigest()
'245138c905599c8579ab186fbdbd6e62396aac35a98a6568f8803eed049d1251'

请注意,散列字符串会产生您在问题中提到的相同(不正确)值,但首先通过unhexlify转换为二进制值unhexlify产生正确的结果,与您在unhexlify得到的值相匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM