Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7将比特币私钥转换为WIF私钥_Python_Python 2.7_Bitcoin - Fatal编程技术网

Python 2.7将比特币私钥转换为WIF私钥

Python 2.7将比特币私钥转换为WIF私钥,python,python-2.7,bitcoin,Python,Python 2.7,Bitcoin,我刚刚作为一名编码新手完成了一个教程。教程是这样的:。我想用一个简单易读(不神秘)的Python文件生成我的比特币地址/私钥,就像现在编写的代码一样 教程中提到了比特币地址以“1”开头的部分,而不是私钥以“5”开头的部分。另外,我还缺少如何加密私钥(以“6”开头)。正如你所看到的比特币主网络 在教程结束后用作逐步指南。最后,我对我自己尝试做这件事的想法发表了评论,因为这一切都是垃圾。(具有“SHA256哈希扩展私钥”的部分 这在很多层面上都是错误的”)我认为我将80字节添加到私钥的部分可能是正确

我刚刚作为一名编码新手完成了一个教程。教程是这样的:。我想用一个简单易读(不神秘)的Python文件生成我的比特币地址/私钥,就像现在编写的代码一样

教程中提到了比特币地址以“1”开头的部分,而不是私钥以“5”开头的部分。另外,我还缺少如何加密私钥(以“6”开头)。正如你所看到的比特币主网络

在教程结束后用作逐步指南。最后,我对我自己尝试做这件事的想法发表了评论,因为这一切都是垃圾。(具有“SHA256哈希扩展私钥”的部分 这在很多层面上都是错误的”)我认为我将80字节添加到私钥的部分可能是正确的

PS:我现在使用静态私钥,直到一切正常为止,这就是为什么我注释掉了非静态私钥部分。它是通过第一部分注释掉的“非静态私钥使用”生成的。我还注释掉了已签名的消息代码行(在代码的底部),因为它们显示在教程中,对于生成密钥/地址并不重要。我还试图“美化”代码,只在文件的底部添加打印等内容,并对内容进行稍微不同的排序等,但结果是Python 2.7不喜欢这样

我正在使用Python2.7,成功地安装了所有内容,代码现在在注释掉的部分正常工作。我用bitaddress.org验证了它打印的结果,就像教程中的上传程序一样。尝试搜索以找到解决方案,但我无法从搜索结果中获得任何有用的信息

如果你能帮我解决少了几行代码,我会很高兴的!也可以在代码中解释/注释什么起作用。特别是缺少的BIP38私钥密码加密。所以我能看到什么是什么,也能理解什么

运行.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
在这里,您可以看到我的代码,根据教程,这里和那里都有注释: (忘了注释掉“这是我的哈希ext私钥校验和”部分,很抱歉混淆。这是我现在需要帮助的代码。)


您可能从这些步骤中误解了,所有的散列和内容都必须作为字节而不是字符串在键上完成

这意味着,如果要从私钥
“29a59…”
派生WIF密钥,则不必散列字符串
“8029a59…”
,而是相应的二进制数据

这里是缺少的代码片段

# importing binascii to be able to convert hexadecimal strings to binary data
import binascii

# Step 1: here we have the private key
private_key_static = "29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736"
# Step 2: let's add 80 in front of it
extended_key = "80"+private_key_static
# Step 3: first SHA-256
first_sha256 = hashlib.sha256(binascii.unhexlify(extended_key)).hexdigest()
# Step 4: second SHA-256
second_sha256 = hashlib.sha256(binascii.unhexlify(first_sha256)).hexdigest()
# Step 5-6: add checksum to end of extended key
final_key = extended_key+second_sha256[:8]
# Step 7: finally the Wallet Import Format is the base 58 encode of final_key
WIF = base58.b58encode(binascii.unhexlify(final_key))
print (WIF)
其中告诉我们由十六进制字符串表示的二进制数据


代码的其余部分工作正常;)

好的细节@BloodyPythonNewbie!欢迎来到这个网站。只是一个提示-阅读问题时,如果没有背后的个人故事,会更容易。我删去了几个不影响问题内容本身的句子。希望你能尽快得到答案:)谢谢!事实上,正如你编辑它似乎删除了部分,我希望它作为一个易于阅读,而不是神秘的文件。就像现在一样!:)需要我理解的代码行的帮助。在网上看到了很多非常神秘的python代码,但没有任何用处。就像这个代码将是最好的帮助我!谢谢我很快会仔细考虑试用,并会回复。:)再次感谢!
# importing binascii to be able to convert hexadecimal strings to binary data
import binascii

# Step 1: here we have the private key
private_key_static = "29a59e66fe370e901174a1b8296d31998da5588c7e0dba860f11d65a3adf2736"
# Step 2: let's add 80 in front of it
extended_key = "80"+private_key_static
# Step 3: first SHA-256
first_sha256 = hashlib.sha256(binascii.unhexlify(extended_key)).hexdigest()
# Step 4: second SHA-256
second_sha256 = hashlib.sha256(binascii.unhexlify(first_sha256)).hexdigest()
# Step 5-6: add checksum to end of extended key
final_key = extended_key+second_sha256[:8]
# Step 7: finally the Wallet Import Format is the base 58 encode of final_key
WIF = base58.b58encode(binascii.unhexlify(final_key))
print (WIF)