APP
开发教程:使用Python生成比特币地址
2020-03-24 21636 1

比特币是2009年1月创建的一种数字货币。比特币地址是一个唯一的标识符,用作可以发送或保留加密货币的虚拟位置。交易提供在拥有私钥和比特币地址的比特币钱包之间转移资产。私钥确保交易来自钱包的所有者。离线生成比特币地址也是可能的。这段代码解释了如何逐步生成比特币地址。如下图所示,生成比特币地址时有一些操作。

让我们开始研究如何生成比特币地址;

步骤1:椭圆曲线数字签名算法用于生成私钥,因为公钥密码术提供了比特币的签名原理。

ecdsaPrivateKey = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
print("ECDSA Private Key: ", ecdsaPrivateKey.to_string().hex())

步骤2:由于使用了公钥加密技术,我们需要依赖于私钥的公钥。因此我们也使用椭圆曲线数字签名算法来生成它。

ecdsaPublicKey = '04' + ecdsaPrivateKey.get_verifying_key().to_string().hex()
print("ECDSA Public Key: ", ecdsaPublicKey)

步骤3:我们将SHA256应用于步骤2中创建的ECDSA公钥。

hash256FromECDSAPublicKey = hashlib.sha256(binascii.unhexlify(
ecdsaPublicKey)).hexdigest()

print("SHA256(ECDSA Public Key): ", hash256FromECDSAPublicKey)

步骤4:我们将RIDEMP160应用于步骤3中创建的值,并获得20字节的值。

ridemp160FromHash256 = hashlib.new('ripemd160',
binascii.unhexlify(hash256FromECDSAPublicKey))

print("RIDEMP160(SHA256(ECDSA Public Key)): ",
ridemp160FromHash256.hexdigest())

步骤5:我们将00作为网络字节添加到在步骤4中创建的值之前。

prependNetworkByte = '00' + ridemp160FromHash256.hexdigest()
print("Prepend Network Byte to RIDEMP160(SHA256(ECDSA Public Key)): ",
prependNetworkByte)

步骤6:我们将双SHA256应用于在步骤5中创建的校验和值。

hash = prependNetworkByte
for x in range(1,3):
hash = hashlib.sha256(binascii.unhexlify(hash)).hexdigest()
print("\t|___>SHA256 #", x, " : ", hash)

步骤7:我们获得在步骤6中创建的4个字节的值作为校验和。

cheksum = hash[:8]
print("Checksum(first 4 bytes): ", cheksum)

步骤8:我们将步骤7中创建的校验和值附加到步骤5中创建的值。

appendChecksum = prependNetworkByte + cheksum
print("Append Checksum to RIDEMP160(SHA256(ECDSA Public Key)): ",
appendChecksum)

步骤9:我们将Base58编码应用于在步骤8中创建的值。Base58编码之后,我们得到的值是比特币地址。(在Python中,b58encode结果应解码为utf-8以显示)

bitcoinAddress = base58.b58encode(binascii.unhexlify(appendChecksum))
print("Bitcoin Address: ", bitcoinAddress.decode('utf8'))

最后,生成的结果如下:

ECDSA Private Key: 58d31714300fcf58434422014defce57d53f4cc3b76314

d34dee729dcb7fc07e
------------------------------------------------------
ECDSA Public Key: 0478e410b429fcc6b9d46d30526fdb6d1fa292f38ce02bd2

c6c569a4d0c06ab7b0bf2c7444f95064b5b4e9ed2ef2eb96425a3e9873315cbeb6a

2e3b22e7978d304
------------------------------------------------------
SHA256(ECDSA Public Key): 558f16eb2e93084f763b20a0005734ff32f134ef

53990da26273166bb7afc28c
------------------------------------------------------
RIDEMP160(SHA256(ECDSA Public Key)): daa4e87dcb30d406d24f76bcc2afe

2ef550c9068
------------------------------------------------------
Prepend Network Byte to RIDEMP160(SHA256(ECDSA Public Key)): 00daa

4e87dcb30d406d24f76bcc2afe2ef550c9068
------------------------------------------------------
|___>SHA256 #1 : 1d7d571d176f378eabd73b1e3ac0fb5a688855d41ae5ee89

56afb9c13b5c7027
|___>SHA256 #2 : b0a511fb05bcf1872be44d98dad592c9641fe47ee7f48f1e

cee18b6805bd4ba4
------------------------------------------------------
Checksum(first 4 bytes):
b0a511fb
------------------------------------------------------
Append Checksum to RIDEMP160(SHA256(ECDSA Public Key)): 00daa4e87

dcb30d406d24f76bcc2afe2ef550c9068b0a511fb
------------------------------------------------------
Bitcoin Address: 1Lw5rqh94dWzArQ9tDY6Ucswxo3Ums7VWi

内容来源:区块链研究实验室 作者:链三丰

版权声明:本文仅为传播消息之用,不代表币源社区立场,文章不构成投资建议。如需转载,请务必注明文章原作者以及来源,部分图片来源于网络,我们尊重版权,如有疑问敬请联系,我们将核实并删除。

我要评论
字数上限500
评论(1)
  • 189****4445

    发表于2个月前

    本公司有大量现成的系统:


    1.现成优惠价:
    万通启元交易所、cxc真实币源码,刷脸支付系统

    云比特,趣步,亦跑,闪步

    云点机器人、华登区块狗

    区块猫,全民养鱼等养殖的带源码出售,包搭建,包服务!!
    (重要提醒,火爆系统)
    2.区块链多币种平台:区块链+电商、区块链+多商家入驻

    3.钱包,交易所,开发代币

    需要的联系我18819288024蔡生