Private-Key
如何從 base58 編碼的私鑰計算公鑰?
我關注了這篇文章並為比特幣錢包創建了一個私鑰。該文章說,在找到隨機的 256 位(32 字節)整數後,應添加版本號並添加校驗和。這會產生一個 37 字節的十六進制。現在我試圖找到與這個私鑰關聯的公鑰。我了解到公鑰是通過在私鑰上應用 ECDSA secp256k1 曲線來計算的。但是 ECDSA 算法只接受 32 個字節作為輸入。
那麼我做錯了什麼?
提前致謝。
私鑰就是你生成的 32B 熵。在錢包之間,此私鑰可以以某種格式編碼,該格式提供更多資訊,例如網路(main/test/alt)以及是否使用了壓縮或未壓縮的公鑰。這種編碼稱為錢包導入格式。
version
(1B) (0x80 主網/0xEF 測試網)privatekey
(32B)0x01
壓縮標記 (1B)checksum
(4B)<https://teachbitcoin.io/wallets.html#/2>
校驗和是它之前的所有內容。數據最終以base58編碼。
要獲取此 WIF 數據並生成公鑰,錢包只需提取私鑰 32B) 併計算公鑰點
private_key * Generator_point = public_key(x,y)
得到的 x, y 公鑰點就是您的公鑰。如果壓縮市場打開,取 x 座標並根據它是偶數還是奇數在前面加上 0x02 或 0x03。
- 壓縮公鑰:
0x02/0x03 + x_coordinate(32B)
- 未壓縮的公鑰:
0x04 + x_coordinate(32B) + y_coordinate(32B)