为了隐藏起某些信息,且保证这些信息不被篡改,需要用到哈希算法。keccak256算法则可以将任意长度的输入压缩成64位16进制的数,且哈希碰撞的概率近乎为0。
在solidity编程中,有时候会以keccak值进行输入,这样其他节点就不知道你的具体信息是什么。当一定的时间过去后,你再公布你的具体信息,其他节点就可以验证你公布的信息的keccak值是否与之前申明的一致,从而判断你有没有撒谎。
用remix生成keccak值
pragma solidity 0.6.2; contract TestKeccak { address secret; constructor(address _secret)public { secret = _secret; } function encode() public view returns (bytes32 result) { result = keccak256(abi.encodePacked(secret)); } }
其中的address secret
的类型根据自己需求来定义比如uint
之类的,当然定义不同加密出来的keccak256值也是不同的。
编译好合约后,我们设置数值,如下图:
部署好合约后,运行encode函数得到keccak加密值:
好啦,我们这样就相当于生成了一个凭证了。凭着这个哈希值,别人就可以在后面的某个时间点判断我们之前的预判是否为真。