Cryptography
如何生成比特幣私鑰校驗和
我想了解比特幣私鑰是如何構成的。
看看這個圖形生成器 <https://royalforkblog.github.io/2014/08/11/graphical-address-generator/#hello>
我了解第 1 步,如何生成私鑰:
2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824
我可以看到前置的版本號
80
,並且我應該附加壓縮標誌01
我的問題是關於第 4 步,它被簡單地詳細描述為“附加校驗和。校驗和是被校驗和的任何內容的雙 sha256 雜湊的前 4 個字節。”
所以我把
802CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B982401
SHA-256 加倍,我沒有得到任何像預期的校驗和F29E9187
誰能幫我理解
F29E9187
是如何派生的?
F29E9187
確實是字節的雙 sha256 的前四個字節:802CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B982401
為了檢查這一點,您需要計算此字節數組的雙 sha256。然而,正如已經討論過的,將字元串傳遞
802CF2...
給雜湊函式不會產生正確的答案,因為這個字元串本身不是字節數組(它是數組的十六進制編碼)。所以讓我們創建一個對應於上面十六進制編碼的二進製文件:$ echo -n 802CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B982401 \ | xxd -r -p > temp
讓我們檢查我們的二進製文件
temp
是否有正確的字節:$ hexdump -C temp 00000000 80 2c f2 4d ba 5f b0 a3 0e 26 e8 3b 2a c5 b9 e2 |.,.M._...&.;*...| 00000010 9e 1b 16 1e 5c 1f a7 42 5e 73 04 33 62 93 8b 98 |....\..B^s.3b...| 00000020 24 01 |$.| 00000022
到目前為止,一切都很好。我們現在可以計算這些字節的第一個 sha256 雜湊:
$ sha256sum temp 08a9d3e1296633b2a4071316eaf597f1c93a0ec2f4b68b24c6e0ad2e7c06540c temp
同樣,我們面臨著需要將其轉換為實際字節的十六進制編碼:
$ echo -n 08a9d3e1296633b2a4071316eaf597f1c93a0ec2f4b68b24c6e0ad2e7c06540c \ | xxd -r -p > temp
再次檢查:
$ hexdump -C temp 00000000 08 a9 d3 e1 29 66 33 b2 a4 07 13 16 ea f5 97 f1 |....)f3.........| 00000010 c9 3a 0e c2 f4 b6 8b 24 c6 e0 ad 2e 7c 06 54 0c |.:.....$....|.T.| 00000020
因此,讓我們計算這些字節的 sha256 雜湊:
$ sha256sum temp f29e9187a566a24502d7cd2eae948e74bc4dfafc7deff44cce80e1256ef12a3e temp
您可以看到前 4 個字節確實是
F29E9187
.