首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么solidity的keccak返回与在线生成器不同的值?

为什么solidity的keccak返回与在线生成器不同的值?
EN

Ethereum用户
提问于 2019-07-28 19:34:35
回答 1查看 178关注 0票数 3

我试图实现我自己的小修改承诺&公开投票。我对雷斐尔阶段有意见。显示metod签名如下:

代码语言:javascript
复制
function reveal(bytes32[] memory _reveals, bytes32[] memory _commits)

所以我需要比较散列显示短语和提交短语。我发现这些散列不匹配。

为了演示我的问题,我创建了这个契约:

代码语言:javascript
复制
pragma solidity >=0.5.10;

contract Utils{
   event HashedData(bytes32);

   function getHash(bytes32 data) public pure returns(bytes32){
       return keccak256(abi.encodePacked(data));
   }

   function checkHash(bytes32 hash, bytes32 data) public returns(bool){
        bytes32 hashedData = getHash(data);
        emit HashedData(hashedData);
        return hash==hashedData;
    }
}

示例输入数据:短语:"1_john“到bytes32

数据: 0x315f6b6f74000000000000000000000000000000000000000000000000000000

数据散列(没有0x)

散列: 0x90a0076f07f9884805bdc4d668c55756ff42238a0ad7b824b8a267783e822544

因此,我收到:

我在哪里犯了错?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2019-07-29 04:34:38

您似乎将"315f6b6f74000000000000000000000000000000000000000000000000000000"视为字符串,而不是实际的十六进制字节序列。

通过web3 0.2.x:

代码语言:javascript
复制
web3.sha3('315f6b6f74000000000000000000000000000000000000000000000000000000')
> "0x90a0076f07f9884805bdc4d668c55756ff42238a0ad7b824b8a267783e822544"
web3.sha3('315f6b6f74000000000000000000000000000000000000000000000000000000', { encoding: 'hex' })
> "0x1a32a86fd2fa1e85655c2d86eadd160787458aff3d70eefae6150b79b648693f"

注意,当您将第二个值解释为十六进制时,第二个值是正确的。如果您使用的工具不支持十六进制输入,则需要找到不同的工具。

票数 4
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/73389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档