小龍哥@薪人3星評價(jià)
2020-10-28 16:01:54
比特幣使用橢圓曲線算法生成公鑰和私鑰,選擇的是secp256k1曲線。生成的公鑰是33字節(jié)的大數(shù),私鑰是32字節(jié)的大數(shù),錢包文件wallet.dat中直接保存了公鑰和私鑰。我們在接收和發(fā)送比特幣時(shí)用到的比特幣地址是公鑰經(jīng)過算法處理后得到的,具體過程是公鑰先經(jīng)過SHA-256算法處理得到32字節(jié)的哈希結(jié)果,再經(jīng)過RIPEMED算法處理后得到20字節(jié)的摘要結(jié)果,再經(jīng)過字符轉(zhuǎn)換過程得到我們看到的地址。
這個(gè)字符轉(zhuǎn)換過程與私鑰的字符轉(zhuǎn)換過程完成相同,步驟是先把輸入的內(nèi)容(對于公鑰就是20字節(jié)的摘要結(jié)果,對于私鑰就是32字節(jié)的大數(shù))增加版本號,經(jīng)過連續(xù)兩次SHA-256算法,取后一次哈希結(jié)果的前4字節(jié)作為校驗(yàn)碼附在輸入內(nèi)容的后面,然后再經(jīng)過Base58編碼,得到字符串。
這里需要提一下的是Base58編碼為了讓輸出字符串易于辨別,所以編碼時(shí)故意排除了4個(gè)字符:'0'、'I'、'l'、'O',如果你想生成一個(gè)帶特殊詞綴的地址那就不要帶這4個(gè)符了,比如我的ID(walker)也就不能生成了。