美文网首页
比特币私钥、公钥、钱包地址关系

比特币私钥、公钥、钱包地址关系

作者: 暴走的K哥哥 | 来源:发表于2018-02-27 11:27 被阅读0次

在比特币交易中经常会听到私钥、公钥、钱包地址,它们三者直接到底有什么联系呢?

生成流程

  • 1.首先使用随机数发生器生成一个私钥,一般是256位。
  • 2.私钥经过SECP256K1算法生成公钥,65个字节。SECP256K1是一种椭圆曲线算法,是不可逆的,所以公钥是不可以反推出私钥。
  • 3.同SHA256一样,RIPEMD160也是一种Hash算法,通过公钥计算得出公钥哈希,20个字节。
  • 4.将一个字节的地址版本号连接到公钥哈希头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对齐进行两次SHA256运算,将结果的前4字节作为公钥哈希的校验值(后续可以通过逆运算验证地址是不是错了),连接在其尾部。
  • 5.将上一步结果(地址版本号+公钥哈希+校验值)进行base58进行编码,得到钱包地址,58个字节。

三者间关系

生成地址例子

  • 1.随机数产生私钥
    18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
  • 2.通过椭圆曲线算法产生公钥
    0450863AD64A87AE8A2FE8….82BA6
  • 3.对公钥进行SHA256计算
    600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
  • 4.对第三步结果进行RIPEMD160运算
    010966776006953D5567439E5E39F86A0D273BEE
  • 5.对第四步结果加上版本号
    00010966776006953D5567439E5E39F86A0D273BEE
  • 6.对第五步进行SHA256运算
    445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094
  • 7 对第六步进行SHA256运算
    D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30
  • 8.提出第七步结果的前4个字节
    D61967F6
  • 9.将第八步的4个字节放在第五步结果的尾部
    00010966776006953D5567439E5E39F86A0D273BEED61967F6
  • 10.对第九步结果进行base58编码
    16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

为什么说不会输错比特币地址

因为钱包一般对地址进行逆运算,得出第九步的结果,然后去掉最后4个字节,然后进行两次SHA256得出结果的前4个字节,然后与校验值比较,称为checksum检查。

为什么最后生成地址要使用base58而不是base64

base64包含52个大小写英文字母,0-9的10个数字,\和+。

因为base58去除了容易产生歧义的字符:

  • 大写的i(I),大写的O
  • 小写的L(l)
  • 数字0
  • 影响双击选择的/和+

相关文章

网友评论

      本文标题:比特币私钥、公钥、钱包地址关系

      本文链接:https://www.haomeiwen.com/subject/uztuaxtx.html