從私鑰生成的公鑰在比特幣中是唯一的嗎?
我正在從我的私鑰生成公鑰。我在 Java 腳本和 C# 中做過。但生成的公鑰不同。我在 c# (KeyCore.NET) 中的程式碼:
PrivateKey pv = new PrivateKey(Globals.ProdDumpKeyVersion, "KwY7eRvXXFd7HPX4Zuv8STZMLsVSe2X22HkU24Av84W1Cb7Rd5Yh"); PublicKey pb = pv.PublicKey; Console.WriteLine(pb.ToString());
C# 程式碼
16w4zZWjWnhfEasJcSbfDQeHJRk1LytPHF5ir1ZS9mtUD5adsdH
的結果是 javascript 程式碼的結果是16reZXagkyToongduimD25SEerXwP3MQ4n
一個私鑰對應一個唯一的公鑰。
在您的情況下, 16reZXagkyToongduimD25SEerXwP3MQ4n 是一個地址(雜湊+公鑰的編碼)。
base58 數字
16w4zZWjWnhfEasJcSbfDQeHJRk1LytPHF5ir1ZS9mtUD5adsdH
是(壓縮的)公鑰的 base58Check 編碼:
030d4018f164d58e41e0c5fb99eb5ec26b4f21fc8ad0db726d51a7cce60c75df0a
對應於
KwY7eRvXXFd7HPX4Zuv8STZMLsVSe2X22HkU24Av84W1Cb7Rd5Yh
,其地址為16reZXagkyToongduimD25SEerXwP3MQ4n
。請注意,您的私鑰實際上不僅僅是私鑰。它是一個 38 字節的數字,它是一個包含34
字節的數字的 base58Check 編碼(而不僅僅是 32 用於密鑰)。開頭有一個額外的版本字節0x80
,表示私鑰將用於主要的比特幣網路(而不是測試網路)。還有一個額外的0x01
末尾的後綴字節(就在 4 個校驗和字節之前),表示與此私鑰關聯的公鑰將以壓縮形式(33 字節)而不是未壓縮形式(65 字節)生成。因此,雖然您的密鑰的 WIF 表示確實會導致一個唯一地址(一個對應於主網路上的壓縮密鑰),但實際的 32 字節密鑰可能會導致 4 個地址(取決於公鑰和網路類型)。