Solidity

keccak256() 函式的輸出到底是什麼?

  • March 6, 2022

我一直在瀏覽文章和 youtube 影片,但我仍然不明白。

我正在嘗試找到一個可以用簡單的術語向自己解釋的地方(我對編碼還是很陌生)。

到目前為止,我所擁有的是:

“keccak256() 將輸入映射為隨機的 256 位十六進制數。”

我還不明白輸出到底是什麼。

使用 keccak256 雜湊生成器,我知道它應該看起來像這樣:

97fc46276c172633607a331542609db1e3da793fca183d594ed5a61803a10792

hexadecimal -> numbers 使用 base-16 系統(這部分我理解,地址中可以看到。)

256 位 -> 256 位二進制數字(這部分我沒有。我沒有看到它與輸出的關係。)

先感謝您。

作為序言,讓我們談談十六進制。

十六進制只是一個值的表示。所以二進制數的十六進製表示1100F。您可以通過首先將1000二進制轉換為十進制(它是1 * 8 + 1 * 4 = 12)然後將其轉換為十六進制來驗證這一點B

所以1100二進制是B十六進制的,也是12十進制的(它是14八進制的,無論你選擇什麼基數都可以!)


順便說一下,讓我們想想“256 位十六進制數”到底是什麼意思。

好吧,我們已經知道什麼是“十六進制數”,它是使用 base-16(十六進制基數)表示的數字。所以這意味著我們應該期望輸出被格式化為十六進制數。但是我們根本沒有討論過這個十六進制數是什麼!

256 位正在談論將返回的數字的*大小。*我可以很容易地說出 32 字節或 64 位十六進制數。因此,作為一個 256 位數字,它只能保存和之間的值02^256 - 1如果我們假設該數字沒有符號)。

如果你查看你的十六進制輸出97fc46276c172633607a331542609db1e3da793fca183d594ed5a61803a10792併計算那裡的字元數,你會數到 64。每個十六進製字元代表 4 位,所以我們這裡有 256 位!

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