比特幣從支付人的錢包地址轉(zhuǎn)移到接收人的錢包地址就是了一個(gè)交易礼搁。交易前钓猬,交易的雙方當(dāng)事人必須都有錢包地址普舆。這里介紹錢包地址的產(chǎn)生技術(shù)過(guò)程誊锭。
1. 生成隨機(jī)私鑰:?
? ? ?隨機(jī)選取一個(gè)32字節(jié)的數(shù)表悬,作為私鑰。
2. 生成私鑰對(duì)應(yīng)的公鑰:
? ? ?使用橢圓曲線加密算法計(jì)算私鑰生成對(duì)應(yīng)的非壓縮公鑰丧靡。
? ? ?該非壓縮公鑰包括三部分蟆沫,共65字節(jié)。?
? ? ? ? ? ? ? ?部分(1) 0x04窘行,有一個(gè)字節(jié) 饥追;
? ? ? ? ? ? ? ?部分(2) 公鑰P.X 图仓,有32個(gè)字節(jié)罐盔;?
? ? ? ? ? ? ? ?部分(3)公鑰P.Y,有32個(gè)字節(jié)救崔。
3. 對(duì)公鑰進(jìn)行SHA-256哈希計(jì)算:?
? ? ?將第2步所述的(1)惶看,(2),和(3)合并都一起組成為一個(gè)標(biāo)準(zhǔn)地址六孵,即(1)+(2)+(3)。
? ? ? 對(duì)該標(biāo)準(zhǔn)地址進(jìn)行SHA-256哈希計(jì)算劫窒,得到一個(gè)哈希值主巍。
4. 再進(jìn)行RIPEMD-160哈希計(jì)算:
? ? ?對(duì)第3步計(jì)算所得的哈希值進(jìn)行RIPEMD-160計(jì)算,得到結(jié)果逛艰。
? ? ?例如:12345678901234abcdefghijklmnopqrstuvwxyz
5. 加入地址版本號(hào)(例如00):?
? ? ?就是將版本號(hào)(例如00)加到第4步的結(jié)果之前搞旭。
? ? ? 即 00 + 12345678901234abcdefghijklmnopqrstuvwxyz。? ? ? ? ? ? ? ? ? ?
? ? ? 得到 0012345678901234abcdefghijklmnopqrstuvwxyz
6. 再進(jìn)行兩次 SHA-256 哈希運(yùn)算:
? ? ?將第5步的結(jié)果先進(jìn)行一次SHA-256計(jì)算咬最,可得:
CFD35FA5DEFD89E6AFAE8EC3DFCD4038043DF187606F4A2997733639784F1A2D
? ? ?然后欠动,對(duì)這個(gè)結(jié)果再進(jìn)行一次 SHA-256 哈希運(yùn)算翁垂,得到:
997E9A68BA2ED75691E224FFFFF3C8A4C4E947C633A6246583F85081CA725D06
7. 獲得校驗(yàn)位:
? ? ? ?選取第6步的結(jié)果的前4個(gè)字節(jié)(8位十六進(jìn)制)作為校驗(yàn)位沿猜。
? ? ? ? 即997E9A68。
8. 形成16進(jìn)制的比特幣地址:
? ? ? 把第7步獲得的4個(gè)字節(jié)加在第5步的結(jié)果后面橄妆,
? ? ? 即? 0012345678901234abcdefghijklmnopqrstuvwxyz + 997E9A68祈坠,
? ? ?得到 0012345678901234abcdefghijklmnopqrstuvwxyz997E9A68
? ? ?也就是: 版本號(hào) + 對(duì)公鑰進(jìn)行SHA-256和RIPEMD-160哈希計(jì)算得到的哈希值 +?校驗(yàn)位。
9. 獲得比特幣錢包地址:
? ? ?最后赦拘,用Base58編碼對(duì)第8步的結(jié)果進(jìn)行編碼躺同,得到最終的比特幣錢包地址。