这几天比特币单币的价格已经在12万以上了,对自己来说充满了遗憾和兴奋。遗憾的是之前持有的币没能一直拿住,在对于目前价格非常低的点已经出清了。兴奋的点在做为一个很早就关注虚拟货币的受众,看到市场对于虚拟货币价格和地位的承认。必敬价格是对价值的最大认可。
本文将结合Python3代码解释下比特币的钱包地址是怎么回事。
在比特币交易中常见到的地址如下:
这个习惯称为钱包地址或公钥地址,这个地址只是用做记录做区块链中存储交易信息的,简单说就是仅做交易使用 。是没有办法把这个地址对应钱包中的币带走。要带走可以需要用到他的伴侣-地址私钥,比如下:
5JXfJMw1BvK2y99M16UsyCpXzAKUZ19YmP7xmMbWsEngBx8E1pp
有了类似这样的一个地址就可以把比特币转入到公钥里,存好这个私钥地址就可以在任何安装有比特币客户端的地方找到你的比特币。
之前给朋友介绍到这里,接下来问的最多的问题就是安全吗?或者说别人会不会拿到我这个私钥钱包地址。
告诉你,很安全!
说的这么安全,那么比特币地址是怎么生成的?此处将结合python代码一起简单说一下生成的流程。
1. 随机生成64位16进制数初始私钥 , 前文说到需要保存起来的那个地址就是在这个基础上进行产生的。
对应的代码:
hexPrivateKey = bitcoin.random_key()#getStartKey();
decPrivatekey=bitcoin.decode_privkey(hexPrivateKey,'hex');
长度64,每个位置16种可能,这就是比特币地址的总个数,而通过公私钥去逆向找钱包的话还需要考虑压缩和非压缩地址,碰撞总数量还要再乘2,这就是为什么需要约136年的原因。
生成的结果如:
2.在初始私钥基础上生成WIF非压缩私钥。本文中默认讲非压缩私钥的生成,对压缩私钥有兴趣的可以看代码及代码中注释。
bitcoin.encode_privkey(decKey,'wif')
有了64位的初始私钥为啥还要这个,因为好记便于携带且安全 。生成的地址如下:
5KYzbcgayqjWxqZ21gAAoT6kZEA9HsxS9cacLC71tsEwMbDXrGz
3.在初始私钥基础上进行椭圆加密
mulKey = bitcoin.multiply(bitcoin.G, decPrivatekey)
4.在椭圆加密基础上生成公钥地址:
publicKey = bitcoin.pubkey_to_address(mulKey);
生成的内容:
1FiTUm8x8PdodXFREdN35qW7EqKx2LCHCu
以下为笔者写的生成源码带注释,生成的公钥私钥有压缩和非压缩格式。
以上代码python3执行结果:
参考:
https://pypi.python.org/pypi/bitcoin
http://zhibimo.com/read/wang-miao/mastering-bitcoin/index.html《精通比特币》
领取专属 10元无门槛券
私享最新 技术干货