最新消息:本站技术交流 QQ 群:28124927

比特币地址生成的流程

区块链/比特币 exchen 300浏览 0评论

比特币地址生成的流程

比特币地址是用于发送和接受币的,钱包可以生成地址,每一个地址对应了一个私钥,有了私钥就能操作地址上的币。一个地址的生成最开始是由一个种子生成私钥,然后私钥生成公钥,公钥生成地址,有了公钥是不能反推生成私钥,而保存好私钥,在任何时候都可以生成公钥,有了公钥当然也能生成地址。

通过公钥生成地址的方法是将公钥进行一次 sha256,再进行一次 RIPEMD160,再做一次 Base58Check 编码,最终得到的地址就是类似这种格式 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao,生成地址的公式如下:

Base58 有些朋友可能不了解,但一定会知道 Base64,Base64 可以通过基础的 64 个可见的字符编码任何二进制数据,而 Base58 从原来的 Base64 的基础字符中减掉了 6 个,剩下的基础字符串如下:

比特币地址生成的流程总结如下图所示:


下面我们来实际操作生成一个地址,下载 libbitcoin-explorer(又名 bx),这个工具可以帮助我们生成私钥、公钥、地址,还有可以支持各种 sha256、ripemd160、base58 等编码,如果你用的是 macOS 系统,可以输入下载的命令直接下载并安装

第一个步骤是生成私钥,生成私钥需要指定一个种子,这个种子你可以使用 bx 提供生成随机种子的方法

也可以自己指定种子,为了学习演示的方便,我们可以自定义一个简单的种子,但在真实情况使用千万不要太随意,否则太容易被人碰撞到私钥,比如我们测试用的种子全是 1,使用 ec-new 生成私钥,然后再使用 ec-to-public 通过私钥生成公钥,再使用 ec-to-address 通过公钥生成地址,最终得到的地址是 155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao,操作步骤如下:

通过上面的操作,很方便的得到了地址,但是怎么没有 sha256 和 ripemd160,还有 base58 呢?别着急,下面我们尝试使用公钥一步步生成地址,公钥是 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4,首先使用 sha256,再使用 ripemd160 得到的结果是 2cb09c6c84654b22a54e8c142ef4370cbe9ebb72,然后再使用 base58check 编码得到的地址和第一次的完全一样,操作如下所示:

base58check 和 base58 有什么区别呢?base58check 是先做一次 base58,然后在开头添加版本号和在未尾添加检验和,这样做是为了防止用户输错地址,一般的钱包软件都会计算数据的校验和对比用户的地址是否有效,避免造成资金的丢失。可以通过 base58check-decode 解码得到的信息如下,可以看到版本号是 0。

在公钥开头添加版本号 00,然后计算两次 sha256,结果开头的4个字段是校验码 c1d7ab9c,将校验码添加到公钥末尾,执行 base58 最后生成的地址和第一次也是一样的。

转载请注明:exchen's blog » 比特币地址生成的流程

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址