企业微信网站开发公司,凡科小程序搭建,网站推广案例,网站建设预算申请如何写在前面章节中#xff0c;我们详细介绍了公钥的压缩#xff0c;在比特币网络中#xff0c;一个私钥可以对应两个地址#xff0c;一个地址是由未压缩公钥所生成的地址#xff0c;另一个就是由压缩公钥所创建的地址#xff0c;从公钥到区块链地址的转换算法#xff0c;我们… 在前面章节中我们详细介绍了公钥的压缩在比特币网络中一个私钥可以对应两个地址一个地址是由未压缩公钥所生成的地址另一个就是由压缩公钥所创建的地址从公钥到区块链地址的转换算法我们在这里给出详细描述和代码实现本节我们看看私钥的压缩以及相关的WIF数据格式。 搞笑的是私钥”压缩“后其长度反而比压缩前增加了一个字节。而“压缩”方法也相当简单就是在私钥末尾增加一个字节01例如如果私钥的数据为1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD那么对应的“压缩”格式就是1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD01我们比较一下就可以看出“压缩”后的私钥就是在末尾增加了字节01。为什么“压缩”私钥呢。前面我们提到过公钥有两种存储方法压缩格式和非压缩格式私钥是否“压缩”就对应创建哪种公钥存储模式如果私钥”压缩“过那就意味着使用它来创建压缩格式的公钥如果没有“压缩”那就使用它创建非压缩格式的公钥。 公钥的压缩是为了能在网络进行传输通常情况下私钥不需要经常进行网络传输因为过多的把私钥暴露在网络会增加泄露的几率一旦私钥泄露你所有的资产或私有信息将会丢失。然而在某些情况下私钥也有传输的需要例如将私钥从一个区块链客户端发送到另一个客户端进行导入时私钥就需要进行网络传输了于是我们也就有了对其进行编码的需要由此私钥对应的编码简称为WIF。 我们看看WIF编码格式的基本步骤1如果私钥对应的是比特币主网络那么在私钥的开头增加一个字节0x80,如果对应测试网络增增加字节0xef.2将其进行大端格式存储3,如果该私钥要用来创建压缩格式的公钥那么在步骤2的末尾增加1个字节0x014,对步骤3做sha256哈希然后去结果的前4个字节5.把步骤3和4的结果首尾相连然后再做base58编码我们使用代码实现看看 privKey 0x038109007313a5807b2eccc082c8c3fbb988a973cacf1a7df9ce725c31b14776
pubKey privKey * Gclass PrivateKey:def __init__(self, secret):self.secret secretdef wif(self, compressedTrue, testnetFalse):#先将私钥进行大端转换secret_bytes self.secret.to_bytes(32, big)if testnet:#如果是测试网络的私钥则在开头增加字节0xefprefix b\xefelse:#如果是主网络则在开头增加字节0x80prefix b\0x80if compressed:#如果要创建压缩格式的公钥在末尾增加自己0x1suffix b\0x01else:suffix return encode_base58_checksum(prefix secret_bytes suffix)private_key PrivateKey(privKey)
wif_private_key private_key.wif()
print(fthe wif for give private key is: {wif_private_key}) 上面代码运行后结果为 the wif for give private key is: 19re3h9z4eEC6WYaziGHvAY8nS8hNddiPcxe4B9a6vA2SbEaSjtqDLYC3SYk 更多内容请在 b 站搜索 coding 迪斯尼