Solidity

keccak256(a, b) 函式是如何實現的?

  • September 16, 2018

我需要了解 keccak256(a, b) 是如何實現的,以及它與 keccak256(a || b) 有何不同。

內容是否填充?

我需要這個,因為我不想允許使用者可以偽造雜湊的漏洞,例如通過執行以下操作: H(0xabc, 0xdef) = H(0xa, 0xbcdef) 這將是一個主要的安全漏洞。

謝謝

Solidity 使用非標準打包模式,其中參數被緊密打包。您可以查看文件中的算法:Solidity: non-standard-packed-mode

綜上, keccak256(a,b) = keccak(a || b)給出。你可能想知道為什麼你的例子keccak256(0xa, 0xa) ≠ keccak256(0xaa)似乎證明了我的論點是錯誤的。這僅僅是因為您嘗試使用 Solidity 中未知的數據類型。在 Solidity 中,數字以 8 位的倍數儲存。您嘗試使用僅包含 4 位的數字,導致 Solidity 編譯器被迫填充您的數字以適合 8 位。0xa比如變成0x0a了。所以你試圖keccak256(0xa, 0xa) = keccak256(0x0a, 0x0a) = keccak256(0x0a0a)比較keccak256(0xaa)

引用自:https://ethereum.stackexchange.com/questions/58505