记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

比特币地址生成的流程

2021-01-31 04:57

比特币地址生成的流程

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

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

address = base58check(ripemd160(sha256(publickey)))

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

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

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


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

brew install bx
brew link libbitcoin-explorer

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

bx seed
06d67bacf53ce6c1e1a8309f0ca4d34c4448180989e474aa

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

bx ec-new "111111111111111111111111111111111111111111111111"
69bac3b554a6464315a3023ebad58cf1cc8abbf5c735cda68f06bce608ff953b
bx ec-to-public 69bac3b554a6464315a3023ebad58cf1cc8abbf5c735cda68f06bce608ff953b
0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4
bx ec-to-address 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4
155JJbE4SVrjQ1h8iGsSiTLUnRqFr8mSao

通过上面的操作,很方便的得到了地址,但是怎么没有 sha256 和 ripemd160,还有 base58 呢?别着急,下面我们尝试使用公钥一步步生成地址,公钥是 0246c15dc356bd419dc297cd7c178fea2a10bfac8a0a2a33826b9602d2535a05a4,首先使用 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's blog » 比特币地址生成的流程


知识来源: https://www.exchen.net/bitcoin-address-generate.html

阅读:47060 | 评论:0 | 标签:区块链/比特币 区块链 比特币

想收藏或者和大家分享这篇好文章→复制链接地址

“比特币地址生成的流程”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

❤永久免费的Hackdig,帮你成为掌握黑客技术的英雄⛄️

🧚 🤲 🧜

标签云