查找 Bip39 校驗和的虛擬碼?
我正在嘗試查找 12 字 BIP39 的校驗和。
我可以很好地找到前 11 個單詞,但我的第 12 個單詞總是偏離幾個位置。
例如,以 128 位熵為例
e84eaa26330ccbb2f866a1dc155e94ba
。在二進制中是
11101000010011101010101000100110001100110000110011001011101100101111100001100110101000011101110000010101010111101001010010111010
.前 11 個 11 位字是:
11101000010 (bin) => 1858 (decimal) => tribe 01110101010 (bin) => 938 (decimal) => inspire 10001001100 (bin) => 1100 (decimal) => maze 01100110000 (bin) => 816 (decimal) => gravity 11001100101 (bin) => 1637 (decimal) => smile 11011001011 (bin) => 1739 (decimal) => sunny 11100001100 (bin) => 1804 (decimal) => thunder 11010100001 (bin) => 1697 (decimal) => stage 11011100000 (bin) => 1760 (decimal) => swing 10101010111 (bin) => 1367 (decimal) => priority 10100101001 (bin) => 1321 (decimal) => pioneer
還有 7 個未使用的位,最後一個:
0111010
.十六進製字元串的 SHA-256 雜湊是
5355d54a3d673c4b1ac20b839ead09af3c6fea6dc24199b477f6ff64e7a68262
. 其中的前 4 位由第一個十六進製字元 表示,5
在二進制中是0101
.我將這 4 個字節附加到我的二進製字元串中:
111010000100111010101010001001100011001100001100110010111011001011111000011001101010000111011100000101010101111010010100101110100101
現在我有了最後一個 11 位字:
01110100101 (bin) => 933 (decimal) => input
但是,當我嘗試針對Ian Coleman 的 Bip39進行驗證時,我看到校驗和應該是
0011
(not0101
),這將使最後一個詞成為01110100011 (bin) => 931 (decimal) => inner
我究竟做錯了什麼?
十六進製字元串的 SHA-256 雜湊為 5355d54a3d673c4b1ac20b839ead09af3c6fea6dc24199b477f6ff64e7a68262。其中的前 4 位由第一個十六進製字元 5 表示,二進制為 0101。
您需要獲取原始二進製文件的 shasum,而不是十六進製字元串:
$ echo "11101000010011101010101000100110001100110000110011001011101100101111100001100110101000011101110000010101010111101001010010111010" | shasum -a 256 -b
給出輸出
3043b02ceb37bb00ab48c91f76bb23d487e1ec822c90e1575967e8838a655f7c *-
將此十六進製字元串轉換為二進制時,我們得到:
0011000001000011101100000010110011101011001101111011101100000000101010110100100011001001000111110111011010111011001000111101010010000111111000011110110010000010001011001001000011100001010101110101100101100111111010001000001110001010011001010101111101111100
該字元串的前四位是
0011
,與 Ian Coleman 工具給出的輸出一致。