1. 程式人生 > >BItCoin原始碼解析(1)——Base58編碼

BItCoin原始碼解析(1)——Base58編碼

看了https://blog.csdn.net/pure_lady/article/category/5858993/2好久,決定寫下開篇。

比特幣加密演算法一共有兩類:非對稱加密演算法(橢圓曲線加密演算法)和雜湊演算法(SHA256,RIMPED160演算法)。比特幣私鑰(private key),公鑰(public key),公鑰雜湊值(pubkeyhash),比特幣地址(address)
公鑰和私鑰由橢圓曲線加密演算法生成,私鑰可推出公鑰而反之不能,這也是這篇文章後半部分要隆重介紹的部分。
有了私鑰,你就可以對文字簽名。別人拿了你的公鑰就可以根據簽名認證你是否擁有私鑰。這就是證明你擁有存款的辦法。
為了安全起見,公鑰應該隱藏起來。所以對公鑰進行雜湊加密,生成公鑰雜湊值然後計算雜湊值的比特幣地址:
公鑰雜湊值=RIMPED160(SHA256(公鑰))
比特幣地址=*1*+Base58(0+公鑰雜湊值+校驗碼)
校驗碼=前四位元組(SHA256(SHA256(0+公鑰雜湊值)))

--------------------- 摘自https://blog.csdn.net/tiandiwuya/article/details/79571639?utm_source=copy

這裡的Base58是Base58 編碼而不是常用的Base64演算法。

base58和base64一樣是一種二進位制轉可視字串的演算法,主要用來轉換大整數值。區別是,轉換出來的字串,去除了幾個看起來會產生歧義的字元,如 0 (零), O (大寫字母O), I (大寫的字母i) and l (小寫的字母L) ,和幾個影響雙擊選擇的字元,如/, +。結果字符集正好58個字元(包括9個數字,24個大寫字母,25個小寫字母)。不同的應用實現中,base58 最後查詢的字母表可能不同,所以沒有具體的標準,BitCoin中用的如下:

1~9: 9個(不包含數字0)

a~z(剔除小寫的 L ):25個(注意包含了小寫的 o)

A~Z(剔除 大寫的O 大寫的I  ) 24個