Development

在我發送硬幣之前如何測試和驗證虛榮鑰匙?

  • February 28, 2019

我在同一台機器上執行 vanitygen 和 oclvanitygen,執行後意識到這兩個 exe 共享相同的輸出文件。

我過去有過許多程序附加到可能發生損壞的同一個 TXT 文件的經驗。

無論損壞的來源如何,驗證由 vanitygen 創建的密鑰的最完整方法是什麼?

更新

我添加了開發人員標籤,因為我希望批量進行驗證。命令行腳本也可以工作。

如果您不想線上進行,您可以嘗試將私鑰導入 Bitcoin-Qt,然後查看匹配的公鑰是否是您所期望的。

Openssl 可用於將私鑰轉換為公鑰。以下命令為您提供來自已知私鑰的公鑰。私鑰應採用 PEM 文件的形式:

$ cat private_key.pem

-----開始EC私鑰-----
MHQCCAQEEIMURrYd6CTHlrrV0JOxnze9ldaq3mRYMnYJ8195GldAVoAcGBSubBBAAK
oUQDQgAEANPTV3v+8AMXnIPaerOWziyc6tHbmbhORhbVKv1ACYuO+ohlFaV6QaOz
/ AGjoSXV0ZeKxq7FijsAdBzeu23Fgg ==
-----結束EC私鑰-----

**注意:**如果您有十六進制格式的私鑰,則應使用此答案的過程將其轉換為 PEM 格式。

要從私鑰中獲取公鑰,我們使用 openssl:

$ openssl ec -pubout /dev/null

-----開始公鑰-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEANPTV3v+8AMXnIPaerOWziyc6tHbmbhO
RhbVKv1ACYuO+ohlFaV6QaOz/AGjoSXV0ZeKxq7FijsAdBzeu23Fgg==
-----結束公鑰-----

為了將公鑰轉換為比特幣地址,我們需要一些步驟

首先我們需要計算公鑰的 hash160。這可以按如下方式完成:

$ openssl ec -pubout /dev/null |
openssl ec -pubin -pubout -outform DER 2> /dev/null |
尾-c 65 |
openssl dgst -sha256 -binary |
openssl dgst -rmd160 -binary |
xxd -p -c 80

ab085c55b735d4a811df3f55e6508634f1ce1e27

然後必須使用 hash160 來計算校驗和,如下所示:

$迴聲-n“ab085c55b735d4a811df3f55e6508634f1ce1e27”|
xxd -p -r |
openssl dgst -sha256 -binary |
openssl dgst -sha256 -binary |
xxd -p -c 80 |
頭-c 8

7801f8dc

hash160 與校驗和和第一個字節“00”相結合,可以使用 base 58 進行編碼。這給了我們地址:

base58=({1..9} {A..H} {J..N} {P..Z} {a..k} {m..z})

encodeBase58() {
#58 = 0x3A
bc 0) { n%3A ; n/=3A }" |
塔克 |
在閱讀 n 時
做迴聲 -n ${base58[n]}
完畢
}
$ printf "%34s\n" "$(encodeBase58 "00$1$(checksum "$char$1")")" |
sed "y/ /1/"

1GbLZiNzi7DTB4UowMuyqJw5Bh95yCbu3R

綜上所述,我們可以使用函式publicKeyToAddress,定義如下。這可以是 bash 腳本的一部分,也可以在命令行中鍵入。

base58=({1..9} {A..H} {J..N} {P..Z} {a..k} {m..z})

encodeBase58() {
#58 = 0x3A
bc 0) { n%3A ; n/=3A }" |
塔克 |
在閱讀 n 時
做迴聲 -n ${base58[n]}
完畢
}

校驗和(){
xxd -p -r /dev/null |
尾-c 65 |
openssl dgst -sha256 -binary |
openssl dgst -rmd160 -binary |
xxd -p -c 80
)
}
$ openssl ec -pubout /dev/null | publicKeyToAddress

1GbLZiNzi7DTB4UowMuyqJw5Bh95yCbu3R

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