[轉帖]比特幣私鑰、公鑰、錢包地址關係

比特幣私鑰、公鑰、錢包地址關係

https://www.jianshu.com/p/12c4714e273f

 

在比特幣交易中常常會聽到私鑰、公鑰、錢包地址,它們三者直接到底有什麼聯繫呢?算法

生成流程

 
  • 1.首先使用隨機數發生器生成一個私鑰,通常是256位。
  • 2.私鑰通過SECP256K1算法生成公鑰,65個字節。SECP256K1是一種橢圓曲線算法,是不可逆的,因此公鑰是不能夠反推出私鑰。
  • 3.同SHA256同樣,RIPEMD160也是一種Hash算法,經過公鑰計算得出公鑰哈希,20個字節。
  • 4.將一個字節的地址版本號鏈接到公鑰哈希頭部(對於比特幣網絡的pubkey地址,這一字節爲「0」),而後對齊進行兩次SHA256運算,將結果的前4字節做爲公鑰哈希的校驗值(後續能夠經過逆運算驗證地址是否是錯了),鏈接在其尾部。
  • 5.將上一步結果(地址版本號+公鑰哈希+校驗值)進行base58進行編碼,獲得錢包地址,58個字節。

三者間關係

 

生成地址例子

  • 1.隨機數產生私鑰
    18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
  • 2.經過橢圓曲線算法產生公鑰
    0450863AD64A87AE8A2FE8….82BA6
  • 3.對公鑰進行SHA256計算
    600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
  • 4.對第三步結果進行RIPEMD160運算
    010966776006953D5567439E5E39F86A0D273BEE
  • 5.對第四步結果加上版本號
    00010966776006953D5567439E5E39F86A0D273BEE
  • 6.對第五步進行SHA256運算
    445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094
  • 7 對第六步進行SHA256運算
    D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30
  • 8.提出第七步結果的前4個字節
    D61967F6
  • 9.將第八步的4個字節放在第五步結果的尾部
    00010966776006953D5567439E5E39F86A0D273BEED61967F6
  • 10.對第九步結果進行base58編碼
    16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

爲何說不會輸錯比特幣地址

由於錢包通常對地址進行逆運算,得出第九步的結果,而後去掉最後4個字節,而後進行兩次SHA256得出結果的前4個字節,而後與校驗值比較,稱爲checksum檢查。網絡

 

爲何最後生成地址要使用base58而不是base64

base64包含52個大小寫英文字母,0-9的10個數字,\和+。學習

由於base58去除了容易產生歧義的字符:區塊鏈

  • 大寫的i(I),大寫的O
  • 小寫的L(l)
  • 數字0
  • 影響雙擊選擇的/和+
 
 
0人點贊
 
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息