目錄
區塊鏈錢包wallet丟失的場景
區塊鏈錢包中包含成對的私鑰和公鑰,用戶用私鑰來簽名交易,從而證明該用戶擁有交易的輸出權。但如果用戶遭遇病毒破壞、誤操作新建錢包覆蓋等,導致錢包丟失,就需要進行錢包wallet恢復。
區塊鏈錢包wallet存儲結構分析
目前所有存儲在本地的區塊鏈錢包,都遵守私鑰-公鑰架構,圖例如下:
私鑰是一個256位隨機數,所謂256位就是256個0和1組成的數字,256除以8等於32,即32個字節,用16進製表示這個數的範圍大小是介於0x0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間的一個數。
我們隨機生成一個合法的私鑰如下:8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
橢圓曲線算公鑰
生成了私鑰之後,我們使用橢圓曲線加密算法(ECDSA-secp256k1)計算0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB
對公鑰哈希技術
對上面的公鑰進行SHA-256哈希計算,得到結果:2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d
計算 RIPEMD-160哈希值
取上一步結果,進行RIPEMD-160計算,得到結果:
0b14f003d63ab31aef5fedde2b504699547dd1f6
加入地址版本號
比特幣主網版本號“0x00”,取上一步結果,在前面加上16進制的00,即:000b14f003d63ab31aef5fedde2b504699547dd1f6
計算 SHA-256 哈希值
取上一步結果,進行SHA-256計算,可得:
ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536
然後,對以上結果再次計算 SHA-256 哈希值,得到:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
取上一步結果的前4個字節(8位十六進制)869ac57b
把這4個字節加在第五步的結果後面作爲校驗位,將這4個字節加載第五步的結果後面,這就是比特幣地址的16進制形態了:869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6
用Base58編碼變換地址
對上一步的結果進行Base58編碼,得到:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7
下圖爲一個錢包的底層十六進制數據(來源:data-unit ):
區塊鏈錢包wallet數據恢復案例
通過解析區塊鏈錢包的源代碼,及錢包dat文件結構,我們從磁盤上恢復出被刪除的區塊錢錢包(來源:data-unit ):
技術支持
溫馨提示:如重要數據丟失,建議在行動前諮詢專業工程師,以免數據遭到二次破壞。