[英]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.