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

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

生成流程

  • 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
  • 影响双击选择的/和+
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 独爱海棠诗伴梦,唯求知己简书逢。 轻舟载过豪门弟,小院偷听李杜声。 细雨长安思旧日,风铃伊去念新城。 天高有意真如...
    王永豪阅读 720评论 9 4