Address
使用 python 或 php 將私鑰轉換為比特幣地址
我有這樣的私鑰
5JYJWrRd7sbqEzL9KR9dYTGrxyLqZEhPtnCtcvhC5t8ZvWgS9iC
如何使用 python 或 php 轉換為比特幣地址?比特幣地址範例
18V7u8YNHKwG944TCkzYYj32hb6fdFPvQf
我認為這個影片會詳細解釋它(python): https ://youtu.be/tX-XokHf_nI
使用來自 video、pip packages
ecdsa
和hashlib
的程式碼base58
:import ecdsa import hashlib import base58 # WIF to private key by https://en.bitcoin.it/wiki/Wallet_import_format Private_key = base58.b58decode_check("5JYJWrRd7sbqEzL9KR9dYTGrxyLqZEhPtnCtcvhC5t8ZvWgS9iC") Private_key = Private_key[1:] # Private key to public key (ecdsa transformation) signing_key = ecdsa.SigningKey.from_string(Private_key, curve = ecdsa.SECP256k1) verifying_key = signing_key.get_verifying_key() public_key = bytes.fromhex("04") + verifying_key.to_string() # hash sha 256 of pubkey sha256_1 = hashlib.sha256(public_key) # hash ripemd of sha of pubkey ripemd160 = hashlib.new("ripemd160") ripemd160.update(sha256_1.digest()) # checksum hashed_public_key = bytes.fromhex("00") + ripemd160.digest() checksum_full = hashlib.sha256(hashlib.sha256(hashed_public_key).digest()).digest() checksum = checksum_full[:4] bin_addr = hashed_public_key + checksum # encode address to base58 and print result_address = base58.b58encode(bin_addr) print ("Bitcoin address {}".format(result_address))
我沒有在 python 中做很多工作,但我想我會嘗試解決這個問題,以發現新開發人員進入該領域以計算像地址這樣的簡單事物是多麼容易。
我注意到的第一件事是,儘管有很多比特幣 Python 包的搜尋結果,但很難評估它們中的任何一個是否合法或由知名開發人員編寫。最受歡迎的比特幣包似乎是由 Vitalik 編寫並在多年前被棄用的包。
我決定走另一條路:Electrum。
Electrum 是一個非常受歡迎的錢包,擁有出色的支持,我親自見過開發人員。程式碼庫在 github 上,維護良好,審查良好。我碰巧知道它是用python編寫的。
複製並安裝 repo 後:https ://github.com/spesmilo/electrum/
您的問題的答案分為兩行:
$ cd electrum $ python3 Python 3.7.6 (default, Dec 30 2019, 19:38:28) [Clang 11.0.0 (clang-1100.0.33.16)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from electrum import bitcoin >>> bitcoin.address_from_private_key('5JYJWrRd7sbqEzL9KR9dYTGrxyLqZEhPtnCtcvhC5t8ZvWgS9iC') '1AsSgrcaWWTdmJBufJiGWB87dmwUf2PLMZ'
作為健全性檢查,我使用我更熟悉的 bcoin(一個 Javascript 比特幣庫)重新執行了計算:
$ node Welcome to Node.js v12.13.0. Type ".help" for more information. > const bcoin=require('bcoin') undefined > bcoin.KeyRing.fromSecret('5JYJWrRd7sbqEzL9KR9dYTGrxyLqZEhPtnCtcvhC5t8ZvWgS9iC') { witness: false, nested: false, publicKey: '04fb95541bf75e809625f860758a1bc38ac3c1cf120d899096194b94a5e700e891c7b6277d32c52266ab94af215556316e31a9acde79a8b39643c6887544fdf58c', script: null, program: null, type: 'pubkeyhash', address: '1AsSgrcaWWTdmJBufJiGWB87dmwUf2PLMZ' }