主页 > imtoken官网地址打不 > 比特币地址生成过程
比特币地址生成过程
比特币地址生成过程
我们知道比特币地址用于发送和接收硬币。钱包可以生成地址。每个地址对应一个私钥。使用私钥,您可以操作地址上的硬币。地址的生成首先从种子生成私钥,然后私钥生成公钥,公钥生成地址。有了公钥,私钥不能反向生成,但是如果保存了私钥,可以随时生成私钥。公钥,有了公钥,当然也可以生成地址。
从公钥生成地址的方法是对公钥进行sha256,再RIPEMD160,再Base58Check编码。最终地址类似于这种格式 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao。地址生成公式如下:
address = base58check(ripemd160(sha256(publickey)))
Base58 有的朋友可能不明白,但是会知道Base64,Base64可以通过基本的64个可读的字符串对任何二进制数据进行编码,Base58通过58个可读的基本字符串将原来的Base64基本字符串减去6,剩下的基本字符串如下:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
比特币地址生成过程总结如下图:
我们通过实际操作生成地址比特币地址是怎么存起来的,下载libbitcoin-explorer(和bx),这个工具可以帮助我们生成私钥、公钥、地址,并且可以支持sha256、ripemd16<@等各种编码0、base58,如果你使用的是macOS系统,可以输入下载的命令直接下载安装
brew install bx brew link libbitcoin-explorer
第一步是生成私钥。生成私钥需要指定种子,可以使用 bx 提供生成随机种子的方法
bx seed 06d67bacf53ce6c1e1a8309f0ca4d34c4448180989e474aa
您也可以自己指定种子。为了学习和演示的方便,我们可以自定义一个简单的种子,但在实际情况下使用。不要太随便,否则太容易有人撞到私钥了。比如我们用来测试的种子都是1,使用ec-new生成私钥,然后使用ec-to-public通过私钥生成公钥,再使用ec-new生成公钥。使用ec-to-address通过公钥生成地址,最终地址为155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao,操作步骤如下:
bx ec-new "111111111111111111111111111111111111111111111111" 69bac3b554a6464315a3023ebad58cf1cc8abbf5c735cda68f06bce608ff953b bx ec-to-public 69bac3b554a6464315a3023ebad58cf1cc8abbf5c735cda68f06bce608ff953b 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4 bx ec-to-address 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao
通过上面的操作,很方便的得到了地址,但是为什么不是sha256和ripemd160,base58呢?别着急,下面我们用一步一步生成地址,是0246c15dc356bd419bd419297cd7c178fea297cd7c178fea297cd7c178fea2a10bfac80a2a33dc296b9602d2505a4,使用sha256,再使用ripemd160得到的结果是2cb09c6c84654b22a54e8c142ef4370cbe9ebb72,然后再使用base58check完整编码的地址和得到第一次的样例,操作显示:
bx sha256 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4 b533eba7460321151266276429b03a7e09f9f95679a753d925dd00d64f116a3b bx ripemd160 b533eba7460321151266276429b03a7e09f9f95679a753d925dd00d64f116a3b 2cb09c6c84654b22a54e8c142ef4370cbe9ebb72 bx base58check-encode 2cb09c6c84654b22a54e8c142ef4370cbe9ebb72 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao
base58check 和 base58 有什么区别? base58check就是先做base58,然后在开头加上版本号,最后加上校验和。这是为了防止用户输入错误的地址。一般的钱包软件会计算数据的校验和来比较用户地址是否有效,避免造成资金损失。 base58check-decode可以解码的信息如下,可以看到版本号为0。
bx base58check-decode 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao wrapper { checksum 2628507585 payload 2cb09c6c84654b22a54e8c142ef4370cbe9ebb72 version 0 }
在公钥开头加上版本号00比特币地址是怎么存起来的,然后计算两次sha256。结果开头的4个字段是校验码c1d7ab9c。添加到公钥末尾,执行base58生成和第一次一样的地址。
bx sha256 002cb09c6c84654b22a54e8c142ef4370cbe9ebb72 3fda3c2e378e7a43eb6649bc776b69d223a53c22fba0855e0e7e0da602a9af36 bx sha256 3fda3c2e378e7a43eb6649bc776b69d223a53c22fba0855e0e7e0da602a9af36 c1d7ab9c919166b11aa869d29c5d9cc6b831cace97450bf0b217f743ae1377e9 bx base58-encode 002cb09c6c84654b22a54e8c142ef4370cbe9ebb72c1d7ab9c 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao
转载请注明:exchen的博客 » 比特币地址生成过程