Sha3
keccak256 和 sha3 是否重現相同的雜湊?
我有這個堅固的方法:
function hashData(bytes32 data) public constant returns (bytes32) { var hash = keccak256(data, msg.sender); return hash; }
對於數據 = “0x707974686f6e62”和地址 = “0x4c5f885b9854ce17e5620098e53f3032be002fed”
我沒有得到相同的結果使用
web3.sha3(data,address)
在Solidity中,
sha3
和keccak256
是別名,所以它們的輸出是相同的。
web3.sha3
是不同程式語言中的不同函式(我假設是 JavaScript)。您可能會發現web3.utils.soliditySha3
很有幫助,因為它再現了 Solidity 所做的打包。如果您不使用 web3.js 1.0,ethereumjs-abi也有類似的功能。
嘗試使用 web3 1.0 並
web3.utils.soliditySha3
以與 Solidity 相同的方式執行 sha3/keccak256。將以與solidity相同的方式計算給定輸入參數的sha3。這意味著參數將在散列之前進行 ABI 轉換和緊密打包。