交易所钱包开发 如何生成比特币地址.

2025-02-06 区块链达人

比特币是迄今为止区块链最为成功的项目,也是能够长期稳居虚拟货币市值排名第一的加密货币。比特币,作为一种点对点的电子现金系统,诞生的本意在于解决线上的支付问题,于2008年被一位名为中本聪的“神秘人物”带到这个世界,且发行数量仅仅2100万枚。

 

基于区块链技术,BTC的每个交易都经过全网广播,人人可见,可以查到任何交易历史,无法伪造、篡改交易记录。随着挖矿获取比特币的难度增加,以及比特币为首的数字货币不断发展,催生了一大批数字货币交易所,早期很多用户包括交易所企业、项目方可能会将比特币等加密资产放在交易所平台账户中。但由于交易所聚集了机构以及大量散户的数字资产,且数额庞大,成为黑客攻击的诱因。

 

以收发、存储比特币为基础功能的比特币钱包应运而成。比特币钱包实则是由私钥和公钥所组成的数据库。对于一个钱包而言,最核心的数据便是私钥。谁掌握了私钥就掌握了钱包里的数字资产。私钥能够生成公钥,公钥再生成比特币地址。比特币地址作用就是用来接收比特币。

 

如何生成比特币地址呢?

 

如果掌握了这个流程,就会对纷繁复杂的比特币分叉币地址只是私钥的不同显示方式轻而易举的掌握了,同时对于理解以太坊、EOS地址也是有百益而无一害的。

 

我们在演示时使用私钥 0xccea9c5a20e2b78c2e0fbdd8ae2d2b67e6b1894ccb7a55fc1de08bd53994ea64 为例,生成了一个主网地址 14xfJr1DArtYR156XBs28FoYk6sQqirT2s 。

 

生成比特币地址,是一个私钥生成公钥、公钥生成 hash160,hash160 再进行 base58 运算得到地址的过程,具体可表示如下:

 

由私钥得到公钥,是由 ECDSA 实现的。ECDSA 即椭圆曲线数字签名算法的缩写。

 

椭圆曲线并非真正意义上的啥椭圆,而是图例所示:

 

 

BTC所采用的椭圆曲线是 secp256k1: y2=x3+7

 

如何生成比特币地址,可以分为以下八个步骤

 

第一步,生成私钥

 

比特币有必要使用到 Secp256k1 这条特殊的椭圆曲线得到公私钥,

 

我们通过 OpenSSL 命令来生成私钥。

  

得到的结果是个 16 进制数据

 

0xccea9c5a20e2b78c2e0fbdd8ae2d2b67e6b1894ccb7a55fc1de08bd53994ea64

 

也有一种稍微简单的方式是 openssl rand 32 -hex

 

第二步,生成公钥

 

根据 priv.pem 得到 pub_key,代码如下

 

 

输出 DER 格式, 字符长度是 130

 

pub_key = 04d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f691757b28e31be71f09f24673eed52348e58d53bcfd26f4d96ec6bf1489eab429d

 

这个是没有压缩公钥,压缩公钥是 03d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69

 

一步到位生成私钥、公钥

 

第三步:对第二步的结果进行 hash160 运算

 

hash160 运算 指的是先进行 SHA256,再进行 RMD160。

 

hash160_val = 2b6f3b9e337cedbb7c40839523fb1100709c12f7 

 

第四步:对上一步的结果加上前缀符

 

一般主网地址的前缀符是 00,比特币地址前缀符有很多种,详细可以参考https://en.bitcoin.it/wiki/List_of_address_prefixes

  

step_04 = 002b6f3b9e337cedbb7c40839523fb1100709c12f7

 

第五步: 对上个步骤的结果执行 2 次 SHA256, 取前 8 位作为校验和

 

checksum = 86b2e90c

  

第六步:对第四步结果以及第五步结果进行合并

  

step_06 = 002b6f3b9e337cedbb7c40839523fb1100709c12f786b2e90c

  

第七步. Base58 编码

 

Base58 作为一种独特的编码方式,是从 Base64 变形而来,主要用于比特币的钱包地址。相比 Base64,Base58 去掉了数字 0,大写字母 O,大写字母 I,小写字母 l,+ 和 /,避免引起视觉混淆。

 

演示个 base58 算法如下

 

第八步. 对第六步结果进行 base58 编码

 

获取 14xfJr1DArtYR156XBs28FoYk6sQqirT2s,这是一个由演示的私钥一步步生成的标准的比特币地址。

 

在比特币网络系统中,私钥 => 公钥 => 钱包地址,但反向是不成立的。在区块链世界有一条金科定律,说的是,私钥即财富。因此,私钥的重要性不言而喻。

 

上述阐述了比特币地址的密码学原理。在现实生活中,多用比特币钱包客户端自动生成地址。当下,数字货币的种类呈指数级上升趋势,只能存储、管理

比特币

系数字资产的钱包已经不能满足时代所需,支持多币种的钱包系统深受大众喜爱,特别是企业钱包系统的市场,更需要多功能、操作便捷、安全性能高的钱包系统,比如优盾钱包。