下面看一下生成比特币地址的过程,如图4-5所示。首先要随机生成一个私钥,再用Secp256k1椭圆曲线算法生成公钥,然后对公钥进行两次哈希运算,其目的是增加破解难度,第二次哈希用RIPEMD160是为了产生比SHA-256更短的值,RIPEMD160生成的哈希值是160比特,少于SHA-256的256比特,有效缩短了比特币地址的长度。然后对这个公钥哈希做两次SHA-256哈希,取哈希值前4个字节加到公钥哈希的后面,其目的是用于做Base58Check校验,可以便于发现输入错误的比特币地址,一个错误的比特币地址是致命的,比特币的转出一旦上链是不可逆的,转到错误的比特币地址就如同把比特币转入了一个黑洞,再没有人能够把这笔比特币转移出来。
图4-5 比特币地址的生成过程
使用Base58的另一个好处是可以大大缩短比特币地址的长度,Base58的58进制比16进制能产生更短的地址,并且去掉了容易混淆的0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i),以及“+”和“/”两个字符,如图4-6所示。
图4-6 Base58编码表
最终,把合并后的公钥哈希及校验码用Base58进行编码,就形成了比特币的地址。我们可以把比特币地址看成是账号,把私钥看成是密码,当转账的时候,钱包App会用私钥签名的方式来解锁比特币地址所关联的比特币。