Hash

如果 SHA256 產生一個字母數字散列,那麼散列怎麼會“小於某個值”?

  • July 23, 2016

我的印像是比特幣驗證雜湊的方法涉及確保雜湊以預定數量的零開始。但是,在閱讀此處的文件後,我看到以下句子:

為了證明你做了一些額外的工作來創建一個塊,你必須創建一個不超過某個值的塊頭的雜湊。為了證明你做了一些額外的工作來創建一個塊,你必須創建一個不超過某個值的塊頭的雜湊。例如,如果最大可能的雜湊值是 2^256 - 1,您可以通過生成小於 2^255 的雜湊值來證明您嘗試了最多兩種組合。

這讓我很困惑,因為根據我的研究,比特幣協議使用 SHA256 散列算法,它會產生字母數字散列。例如,當我散列一個名為“foobar.txt”的空文件時,我得到“e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855”。

我的問題是,一個字母數字雜湊輸出如何“小於”另一個?

雜湊不是字母數字,而是十六進制,即 base-16。您可以將其轉換為十進制數。在你的情況下:

0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 = 102987336249554097029535212322581322789799900648198034993671936793

實際字節實際上是 base-256(8 位到一個字節),但是用十六進製表示 base-256 字元串相對容易。

並不是說其他答案在這裡是錯誤的,而只是從另一個角度解決您的困惑:

SHA256 散列算法,產生字母數字散列。

這不是真的。散列算法產生一個字節流。僅當您在螢幕上顯示那串字節時,它通常是十六進制的(包含“字母數字”字元 A 到 F),但這只是為了顯示目的,使其易於閱讀。

您也可以將相同的字節顯示為一個大的十進制數(需要更多的螢幕空間,並且沒有優勢,即每兩位數字恰好代表原始字節的一個字節。或者您可以以二進制顯示:256 個零和一。

我的問題是,一個字母數字雜湊輸出如何“小於”另一個?

即使忽略上述內容,是什麼阻止您按字母順序對單詞列表進行排序?一個詞將“小於”另一個詞。

引用自:https://bitcoin.stackexchange.com/questions/46571