我剛剛通過一個教程作爲一個編碼新手。教程是這個:https://www.youtube.com/watch?v=tX-XokHf_nI。我想用一個容易閱讀(而不是神祕)的Python文件來生成我的比特幣地址/特權碼 - 就像現在編寫代碼的風格一樣。Python 2.7將Bitcoin Privkey轉換爲WIF Privkey
本教程介紹了我從比如「1」開始的比特幣地址,但不是以「5」開頭的特權。另外我缺少如何對BIP38加密私鑰(以「6」開頭)。就像您可以看到的主要比特幣網絡一樣。
使用https://en.bitcoin.it/wiki/Wallet_import_format作爲教程後面的一步一步指南。最後我提出了自己的嘗試,因爲這一切都是垃圾。 (帶有「SHA256 HASHED EXTENDED PRIVATE KEY 這個錯誤在很多層次上」的部分)我認爲我將80字節添加到私鑰的部分可能是正確的。 PS:我現在使用靜態私鑰,直到一切正常,這就是爲什麼我將非靜態私鑰部分註釋掉的原因。它已經通過我註釋過的「非靜態私鑰使用」部分生成。我還註釋了簽名的消息代碼行(位於代碼的底部),因爲它們在教程中顯示,對於密鑰/地址生成不重要。我還試圖通過僅在文件底部放置打印等來「美化」代碼,並將事情分類有點不同等,但事實證明,Python 2.7並不喜歡這樣。
我正在使用Python 2.7,成功安裝了所有東西,代碼正在工作,因爲它現在應該與註釋掉的部分一起工作。我使用bitaddress.org驗證了它打印的結果,就像教程的上傳器一樣。試圖尋找解決方案,但我無法從我的搜索結果中獲得任何有用的信息。
如果你能幫我解決一些缺少的代碼行,我會很高興!也可以在代碼中解釋/評論什麼是什麼。特別是對於尚未缺失的BIP38 Privkey密碼加密。所以我可以看到什麼是可以理解的。
運行.py腳本會返回有效的結果,但我添加的80個字節除外 - 如果這樣做已被我完成,則無法創建。添加80個字節是獲取以「5」開始的最終私鑰的必要步驟。
運行它打印:
This is my Private Key: 29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736
This is my 80 Byte Private Key: 8029a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736
This is my Public Key: 04d370b77a4cf0078ab9e0ba3c9e78e8dd87cc047fa58d751b3719daa29ac7fbf2c3ba8338f9a08f60a74a5d3a2d10f26afa2f703b8c430eecad89d59a9df00ec5
This is my Bitcoin Address: 1B3wS8dQHtfMpFMSmtT5Fy4kHCYvxejtVo
在這裏你可以看到我的代碼,評論在這裏和那裏一樣好,我可以根據教程: (忘了註釋掉「這是我的散列分機私法關鍵校驗」的一部分,很抱歉的混亂。這是我需要現在幫助的代碼。)
import os
import ecdsa
import hashlib
import base58
## STATIC KEY USAGE
private_key_static = "29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736"
## PRINTOUT FROM STATIC PRIVATE KEY
print "This is my Private Key: " + private_key_static
## NON STATIC PRIVATE KEY USAGE
#private_key = os.urandom(32).encode("hex")
#print "this is my private key: " + private_key
## 80-BYTE EXTENDED PRIVATE KEY
private_key_plus_80byte = (('80') + private_key_static)
## PRINTOUT 80-BYTE EXTENDED PRIVATE KEY
print "This is my 80 Byte Private Key: " + private_key_plus_80byte
## SHA256 HASHED EXTENDED PRIVATE KEY
## THIS IS WRONG ON SO MANY LEVELS
#hashed_ext_priv_key_checksum = hashlib.sha256(hashlib.sha256(private_key_plus_80byte).digest()).digest()[:4]
#hashed_ext_priv_key_checksum = hashed_ext_priv_key_checksum.decode("hex")
#print "This is my hashed ext priv key checksum: " + hashed_ext_priv_key_checksum
## PRIVATE! SIGNING KEY ECDSA.SECP256k1
sk = ecdsa.SigningKey.from_string(private_key_static.decode("hex"),
curve = ecdsa.SECP256k1)
## PUBLIC! VERIFYING KEY (64 BYTE LONG, MISSING 04 BYTE AT THE BEGINNING)
vk = sk.verifying_key
## PUBLIC KEY
public_key = ('\04' + vk.to_string()).encode("hex")
## PRINTOUT PUBLIC KEY
print "This is my Public Key: " + public_key
## PUBLIC KEY ENCODING (2x RIPEMD160)
ripemd160 = hashlib.new('ripemd160')
ripemd160.update(hashlib.sha256(public_key.decode('hex')).digest())
middle_man = ('\00') + ripemd160.digest()
checksum = hashlib.sha256(hashlib.sha256(middle_man).digest()).digest()[:4]
binary_addr = middle_man + checksum
addr = base58.b58encode(binary_addr)
print "This is my Bitcoin Address: " + addr
## MESSAGE CONTENT
#msg = "hello world"
## SIGN MESSAGE CONTENT
#signed_msg = sk.sign(msg)
## VERIFY MESSAGE CONTENT
#assert vk.verify(signed_msg, "hello world")
## PRINTOUT SIGNED MESSAGE ENCODED TO HEX
#print "This is a HEX encoded signed Message: " + signed_msg.encode("hex")
好的細節@BloodyPythonNewbie!歡迎來到這個網站。只是一個暗示 - 閱讀這個問題時沒有背後的個人故事更容易。我剝去了幾個不影響問題內容的句子。希望你能儘快得到答案:) – viraptor
非常感謝!事實上,正如你編輯它似乎刪除了我想要的部分,因爲它容易閱讀,而不是神祕的文件。就像現在一樣! :) 需要幫助我瞭解的代碼行。在網上看到很多真正神祕的python代碼,並沒有用處。就像這個代碼將是最好的幫助我一樣! – BloodyPythonNewbie