模擬計算hash前面N個0需要的時間

一方_self發表於2024-11-19

寫了一個python程式碼用來模擬計算當hash前面有N個0時需要多長時間。

程式碼如下:

import hashlib
import time
from datetime import timedelta
from plyer import notification


def find_hash_with_prefix_zeros(prefix_length=6):
    # 初始字串
    base_text = "Hello, World!"
    # 計數器
    counter = 0

    while True:
        # 構建新的字串
        text = f"{base_text}{counter}"
        # 計算雜湊值
        hash_value = hashlib.sha256(text.encode()).hexdigest()
        # print(f"hash_value:{hash_value}")

        # 檢查雜湊值字首是否包含指定數量的0
        if hash_value.startswith('0' * prefix_length):
            notification.notify(
                title="通知",
                message="hash計算完成",
                app_name="hash計算",
                timeout=10  # 通知顯示的時間,單位為秒
            )
            print(f"Found after {counter} attempts:")
            print(f"Text: {text}")
            print(f"Hash: {hash_value}  prefix_length={prefix_length}")
            break

        # 增加計數器
        counter += 1
        # print(f"counter:{counter}")


# 計算某個函式需要執行多長時間
def measure_runtime(func, *args, **kwargs):
    # 記錄開始時間
    start_time = time.time()
    # 呼叫函式
    func(*args, **kwargs)
    # 記錄結束時間
    end_time = time.time()
    # 計算執行時間(秒)
    runtime_seconds = end_time - start_time
    # 將執行時間轉換為 timedelta 物件
    runtime = timedelta(seconds=runtime_seconds)
    # 列印執行時間,格式為小時:分鐘:秒
    print(f"函式執行時間: {runtime}")


def main():
    # 呼叫函式,尋找字首包含N個0的雜湊值
    measure_runtime(find_hash_with_prefix_zeros, prefix_length=6)


if __name__ == '__main__':
    main()

計算過程列印日誌如下:

模擬計算hash前面N個0需要的時間

hash前面N個0的時間記錄:

hash前面幾個0

計算的時長

1

1毫秒

2

1毫秒

3

1毫秒

4

0.24秒

5

1.35秒

6

10.97秒

7

3分31秒

8

1小時28分

9

4天

9個0就需要4天時間了:

模擬計算hash前面N個0需要的時間

我們可以大概預估下:

10

40天

11

400天

後面的就不跑了,btc目前前導19個0,可想而知像btc的挖礦難度了。

隨著0的數量的增加,計算的時長就越長:

模擬計算hash前面N個0需要的時間

我電腦的配置:AMD Ryzen 7 8845HS w/ Radeon 780M Graphics 3.80 GHz

這篇分享文章就到這裡啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊並分享給其他同學,讓更多人受益。

想要了解更多相關知識,可以檢視我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。

感謝你的閱讀與支援,期待在未來的文章中與你再次相遇!

我的微信公眾號:【xdub】,歡迎大家訂閱,我會同步文章到公眾號上。

相關文章