主页 > imtoken钱包官网 > 比特币地址生成过程

比特币地址生成过程

imtoken钱包官网 2023-01-18 17:02:11

首先,让我们简单说一下比特币地址是如何计算出来的。 比特币基于数学密码学。 中本聪使用椭圆加密算法 (ECDSA) 生成比特币的私钥和公钥。 公钥可以由私钥计算出来,公钥的值会通过一系列的数字签名操作得到比特币地址。

需要说明的是:由于比特币地址可以通过公钥计算出来,所以我们经常会把公钥和比特币地址混淆,其实它们是一个概念。 比特币地址只是公钥的另一种格式。

从比特币私钥中得到我们使用的比特币地址需要九个步骤。 中间使用了SHA256加密、RIPEMD160加密和BASE58编码。 我们最终使用的比特币私钥和比特币地址一般都是BASE58编码后的结果。 整个过程如下图所示。

这里写图片描述

第一步是随机选择一个大小在 1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141 之间的 32 字节数字作为私钥。

18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

第二步,使用椭圆曲线加密算法(ECDSA-secp256k1)计算出私钥对应的未压缩公钥。 (一共65个字节,1个字节0x04,32个字节为x坐标,32个字节为y坐标)关于公钥压缩和不压缩的问题会在另一篇文章中说明。

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B

23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

第三步,计算公钥的SHA-256哈希值

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

第四步,取上一步的结果,计算RIPEMD-160哈希值

比特币如何获取和交易_比特币地址怎么获取_比特币收币地址

010966776006953D5567439E5E39F86A0D273BEE

第五步,取上一步的结果,在前面加上地址版本号(比特币主网版本号“0x00”)

00010966776006953D5567439E5E39F86A0D273BEE

第六步,取上一步的结果,计算SHA-256哈希值

445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094

第七步,取上一步的结果,然后计算SHA-256哈希值(哈哈)

D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30

第八步,取上一步结果的前4个字节(8位十六进制)

D61967F6

第九步,将这4个字节加到第五步的结果中作为验证(这是比特币地址的十六进制形式)。

00010966776006953D5567439E5E39F86A0D273BEED61967F6

比特币地址怎么获取_比特币收币地址_比特币如何获取和交易

第十步,使用base58表示法改变地址(这是最常见的比特币地址形式)。

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

(注:有些数以“0x”开头,表示该数用十六进制表示,“0x”本身没有任何意义,是C语言传下来的,按照约定写成,比如0xA就是10十进制。此外,1 字节 = 8 位二进制 = 2 位十六进制)。

我们常说的比特币公钥就是指图中第二步的结果。 HASH160是指第四步RIPEMD160签名的结果。 由于RIPEMD也是一种HASH算法,所以统称为HASH160。 而我们常用的比特币地址就是BASE58编码后的结果。

比特币客户端和钱包也接受各种比特币地址格式,常用格式包括BASE58格式、WIF压缩格式、130位和66位公钥(Public key)格式。 进入Bibuck的钱包工具,点击钱包详情查询页面,如下图,红框内的130位字符串为比特币ECDSA计算出的原始公钥,下面是压缩成66位的公钥格式,以上两种是我们常用的比特币BASE58地址格式和比特币地址WIF(钱包导入格式)压缩格式。

事实上比特币地址怎么获取,各种格式的地址基本上是通用的。 学习了相关知识后,我们会对比特币系统有更深入的了解。

Gobittest网站(国外可访问)提供了比特币原始私钥到公钥到HASH160和BASE58的计算程序,读者可以参考。

这里写图片描述

再重复一遍:

第一步:生成随机私钥

私钥是一个随机数,随机选择一个32字节的数,这个数的范围是1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的一个数,为了方便在下面的计算中比特币地址怎么获取,我们随机生成一个合法的私钥:

比特币收币地址_比特币如何获取和交易_比特币地址怎么获取

8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

第二步:椭圆曲线计算公钥

生成私钥后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算出私钥对应的解压公钥。 生成的公钥一共有65个字节,其中一个是0x04,其中32个是X坐标,另外32个字节是Y坐标:

公钥PX:

06CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385

公钥PY:

FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

第 3 步:计算公钥的 SHA-256 哈希值

结合以上公钥地址得到标准地址:

0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

对齐并进行SHA-256哈希计算得到结果:

比特币如何获取和交易_比特币地址怎么获取_比特币收币地址

2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d

第四步:计算RIPEMD-160哈希值

取上一步的结果进行RIPEMD-160计算得到结果:

0b14f003d63ab31aef5fedde2b504699547dd1f6

第五步:添加地址版本号(比特币主网版本号“0x00”)

取上一步的结果,在前面加上16进制的00,即:

000b14f003d63ab31aef5fedde2b504699547dd1f6

第 6 步:计算 SHA-256 哈希值

将上一步的结果进行SHA-256计算得到:

ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536

然后,对上述结果再次计算SHA-256哈希值,得到:

比特币如何获取和交易_比特币收币地址_比特币地址怎么获取

869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078

第七步:取上一步结果的前4个字节(8位十六进制)

869ac57b

第 8 步:将这 4 个字节添加到第 5 步的结果中

在第五步的结果后面加载这4个字节作为校验位。 这是比特币地址的十六进制形式:

869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6

第九步:将地址进行Base58编码转换

对上一步的结果进行Base58编码得到:

1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

这就是我们经常看到的传统意义上的比特币钱包地址。

上述步骤可以简化如下图所示:

这里写图片描述

我们常说的比特币公钥指的是图中第二步的结果,HASH160指的是第四步RIPEMD160签名的结果。 由于RIPEMD也是一种HASH算法,所以统称为HASH160。 而我们常用的比特币地址就是BASE58编码后的结果。