python - 如何从 pubkey_hash 获取比特币地址?

标签 python hash sha bitcoin blockchain

我正在使用:https://github.com/bitcoin-abe/bitcoin-abe将区 block 链导入 mysql 数据库,5 天后就差不多完成了。所以我开始查看数据,但没有看到任何地址。我知道 BTC 客户端不使用这些,但将它们放在另一个表中仍然会很好。我环顾四周,发现了这个代码:

def hash_to_address(version, hash):
    vh = version + hash
    return base58.b58encode(vh + double_sha256(vh)[:4])

在:https://github.com/bitcoin-abe/bitcoin-abe/blob/3004fe4bad6f64d4c032c735ee23bf9f052d825b/Abe/util.py

当我通过该函数运行 pubkey_hash 时,我没有得到地址的预期结果。例如采用以下 pubkey_hash:62E907B15CBF27D5425399EBF6F0FB50EBB88F18

我应该得到:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

但我得到的是:6GEZdxx5UiTk3U3LaLfsWwRaFAvXEpPNS5R4mqsJDXVJcTNNngTyB5i9S76MLTq

我创建的脚本是:

import util
hash = '62E907B15CBF27D5425399EBF6F0FB50EBB88F18'
print util.hash_to_address("00", hash)

有什么想法或其他方法可以正确地做同样的事情吗?

Appleman1234 为我指明了正确的方向:

import util
hash = '62E907B15CBF27D5425399EBF6F0FB50EBB88F18'
hash = '00' + hash
print "Util: ", util.hash_to_address("", hash.decode('hex'))

最佳答案

您没有得到预期结果的原因是编码问题。

Python 2 的正确代码

import util
hash = '62e907b15cbf27d5425399ebf6f0fb50ebb88f18'
print util.hash_to_address("00".decode('hex'), hash.decode('hex'))

Python 3 的正确代码

import util
import binascii
hash = '62e907b15cbf27d5425399ebf6f0fb50ebb88f18'
print util.hash_to_address(binascii.unhexlify("00"), binascii.unhexlify(hash))

decode 和 unhexlify 函数将十六进制 ASCII 表示形式转换为二进制字节字符串。

您遇到的问题是二进制字符串的散列及其十六进制 ASCII 表示形式的散列是两个不同的散列。

关于python - 如何从 pubkey_hash 获取比特币地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769488/

相关文章:

hash - 哈希冲突的例子?

java - 为什么我们需要在哈希表键匹配中进行更多查找?

java - 确定 GZIPOutputStream 行为

objective-c - Objective-C 中的 OpenSSL SHA256 等效项

Android Key 密码丢失,但我有 keystore 密码

python - 我如何只在 python 脚本中打印整数

python - OpenCV 密集光流矩阵

python - 我在理解 round() 函数时缺少什么?

c++ - 在C++中将字符串散列为整数

python - 获取文本文件中的子目录列表,并在该 txt 文件中附加新的子目录名称