Development
在我發送硬幣之前如何測試和驗證虛榮鑰匙?
我在同一台機器上執行 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