區塊鏈研究實驗室|使用Python生成比特幣地址開發教程

買賣虛擬貨幣

比特幣是2009年1月建立的一種數字貨幣。比特幣地址是一個唯一的識別符號,用作可以傳送或保留加密貨幣的虛擬位置。交易提供在擁有私鑰和比特幣地址的比特幣錢包之間轉移資產。私鑰確保交易來自錢包的所有者。離線生成比特幣地址也是可能的。這段程式碼解釋瞭如何逐步生成比特幣地址。如下圖所示,生成比特幣地址時有一些操作。

讓我們開始研究如何生成比特幣地址;步驟1:橢圓曲線數字簽名演算法用於生成私鑰,因為公鑰密碼術提供了比特幣的簽名原理。

ecdsaPrivateKey=ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)print("ECDSAPrivateKey:",ecdsaPrivateKey.to_string().hex())步驟2:由於使用了公鑰加密技術,我們需要依賴於私鑰的公鑰。因此我們也使用橢圓曲線數字簽名演算法來生成它。

ecdsaPublicKey='04'+ecdsaPrivateKey.get_verifying_key().to_string().hex()print("ECDSAPublicKey:",ecdsaPublicKey)步驟3:我們將SHA256應用於步驟2中建立的ECDSA公鑰。
hash256FromECDSAPublicKey=hashlib.sha256(binascii.unhexlify(ecdsaPublicKey)).hexdigest()print("SHA256(ECDSAPublicKey):",hash256FromECDSAPublicKey)步驟4:我們將RIDEMP160應用於步驟3中建立的值,並獲得20位元組的值。
ridemp160FromHash256=hashlib.new('ripemd160',binascii.unhexlify(hash256FromECDSAPublicKey))print("RIDEMP160(SHA256(ECDSAPublicKey)):",ridemp160FromHash256.hexdigest())步驟5:我們將00作為網路位元組新增到在步驟4中建立的值之前。
prependNetworkByte='00'+ridemp160FromHash256.hexdigest()print("PrependNetworkBytetoRIDEMP160(SHA256(ECDSAPublicKey)):",prependNetworkByte)步驟6:我們將雙SHA256應用於在步驟5中建立的校驗和值。

hash=prependNetworkByteforxinrange(1,3):hash=hashlib.sha256(binascii.unhexlify(hash)).hexdigest()print("\t|___>SHA256#",x,":",hash)步驟7:我們獲得在步驟6中建立的4個位元組的值作為校驗和。

cheksum=hash[:8]print("Checksum(first4bytes):",cheksum)步驟8:我們將步驟7中建立的校驗和值附加到步驟5中建立的值。

appendChecksum=prependNetworkByte+cheksumprint("AppendChecksumtoRIDEMP160(SHA256(ECDSAPublicKey)):",appendChecksum)步驟9:我們將Base58編碼應用於在步驟8中建立的值。Base58編碼之後,我們得到的值是比特幣地址。(在Python中,b58encode結果應解碼為utf-8以顯示)

bitcoinAddress=base58.b58encode(binascii.unhexlify(appendChecksum))print("BitcoinAddress:",bitcoinAddress.decode('utf8'))最後,生成的結果如下:

ECDSAPrivateKey:58d31714300fcf58434422014defce57d53f4cc3b76314

d34dee729dcb7fc07e------------------------------------------------------ECDSAPublicKey:0478e410b429fcc6b9d46d30526fdb6d1fa292f38ce02bd2

c6c569a4d0c06ab7b0bf2c7444f95064b5b4e9ed2ef2eb96425a3e9873315cbeb6a

2e3b22e7978d304------------------------------------------------------SHA256(ECDSAPublicKey):558f16eb2e93084f763b20a0005734ff32f134ef

53990da26273166bb7afc28c------------------------------------------------------RIDEMP160(SHA256(ECDSAPublicKey)):daa4e87dcb30d406d24f76bcc2afe

2ef550c9068------------------------------------------------------PrependNetworkBytetoRIDEMP160(SHA256(ECDSAPublicKey)):00daa

4e87dcb30d406d24f76bcc2afe2ef550c9068------------------------------------------------------|___>SHA256#1:1d7d571d176f378eabd73b1e3ac0fb5a688855d41ae5ee89

56afb9c13b5c7027|___>SHA256#2:b0a511fb05bcf1872be44d98dad592c9641fe47ee7f48f1e

cee18b6805bd4ba4------------------------------------------------------Checksum(first4bytes):b0a511fb------------------------------------------------------AppendChecksumtoRIDEMP160(SHA256(ECDSAPublicKey)):00daa4e87

dcb30d406d24f76bcc2afe2ef550c9068b0a511fb------------------------------------------------------BitcoinAddress:1Lw5rqh94dWzArQ9tDY6Ucswxo3Ums7VWi

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;