Bitcoin-Core

從私鑰生成的公鑰在比特幣中是唯一的嗎?

  • September 5, 2016

我正在從我的私鑰生成公鑰。我在 Java 腳本和 C# 中做過。但生成的公鑰不同。我在 c# (KeyCore.NET) 中的程式碼:

PrivateKey pv = new PrivateKey(Globals.ProdDumpKeyVersion, "KwY7eRvXXFd7HPX4Zuv8STZMLsVSe2X22HkU24Av84W1Cb7Rd5Yh");
PublicKey pb = pv.PublicKey;
Console.WriteLine(pb.ToString());

C# 程式碼16w4zZWjWnhfEasJcSbfDQeHJRk1LytPHF5ir1ZS9mtUD5adsdH 的結果是 javascript 程式碼的結果是16reZXagkyToongduimD25SEerXwP3MQ4n

我使用了 KeyCore.NETbitaddress

一個私鑰對應一個唯一的公鑰。

在您的情況下, 16reZXagkyToongduimD25SEerXwP3MQ4n 是一個地址(雜湊+公鑰的編碼)。

base58 數字16w4zZWjWnhfEasJcSbfDQeHJRk1LytPHF5ir1ZS9mtUD5adsdH是(壓縮的)公鑰的 base58Check 編碼:

030d4018f164d58e41e0c5fb99eb5ec26b4f21fc8ad0db726d51a7cce60c75df0a

對應於KwY7eRvXXFd7HPX4Zuv8STZMLsVSe2X22HkU24Av84W1Cb7Rd5Yh,其地址為16reZXagkyToongduimD25SEerXwP3MQ4n。請注意,您的私鑰實際上不僅僅是私鑰。它是一個 38 字節的數字,它是一個包含34字節的數字的 base58Check 編碼(而不僅僅是 32 用於密鑰)。開頭有一個額外的版本字節0x80,表示私鑰將用於主要的比特幣網路(而不是測試網路)。還有一個額外的0x01末尾的後綴字節(就在 4 個校驗和字節之前),表示與此私鑰關聯的公鑰將以壓縮形式(33 字節)而不是未壓縮形式(65 字節)生成。因此,雖然您的密鑰的 WIF 表示確實會導致一個唯一地址(一個對應於主網路上的壓縮密鑰),但實際的 32 字節密鑰可能會導致 4 個地址(取決於公鑰和網路類型)。

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