我刚刚通过一个教程作为一个编码新手。教程是这个: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