zoukankan      html  css  js  c++  java
  • 比特币--私钥->公钥->钱包地址

    脑钱包-字符串SHA256散列成256bit当做私钥-彩虹表

    脑钱包是开源的程序-->用户输入字符串当做密码-->经过SHA256散列算法-->256长bit位 (即是私钥)-->进过BASE58编码
    -->可见字符串,便于存储-->再经过私钥生成公钥和钱包地址的流程
    BASE58: 比特币专用,类似base64,单是去除了其中易混淆的字母,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +

    比特币私钥-即一个256长bit位(32字节)

    a).  私钥本质是一个256长的bit位,生成方法任意,也可以采用BitCoin自带的程序随机生成(所以会有极小极小极小概率重复)
    b).  通常看到的私钥是经过BASE58编码转成可见字符串,如5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
    

    私钥-->公钥-->钱包地址

    私钥-->公钥

    a). 比特币选取的生成算法是椭圆曲线密码(细节实在不懂啊)下的secp256k1标准, 其公式是y^2 = x^3 + 7
    函数图如下
    b). 公私钥关键公式: K=k*G, 其中k是我们的私钥,G为算法基点(对比特币来说是个固定值),结果K即公钥是函数曲线上的另外一个点。
    k和K的数学运算是单向的,所以不能从公钥推导出私钥。
    我们的⽬标是找到⽣成点G的倍数kG。 也就是将G相加k次。 在椭圆曲线中, 点的相加等同于从该点画切线找到与曲线相交的另⼀点, 然后映射到x轴。

    c). 公钥K(65字节)可以用X/Y轴表示,即(x,y)各32字节,一个字节04
    公钥P.X: 06CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385
    公钥P.Y: FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

    公钥-->钱包地址

    a). 将前面得到的公钥x/Y合并得到标准地址,0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB
    进行SHA-256得到B
    b). 对B进行进行RIPEMD-160计算,得到C
    c). C前面加入地址版本号(比特币主网版本号"0X00"),得到D
    d). 对D进行2次SHA-256得到E
    e). 取E的前4个字节作为校验位加入到D的前面,得到 E(4)D == F -- 即是钱包地址
    f). 对F进行Base58编码即是传统意义上可见的钱包地址啦

  • 相关阅读:
    基本的数据库操作类
    GridView 导出Excle
    VS2005 调试时断点无效的小问题
    TSQL日期相关
    Data Access Application Block 利用DataSet 操作DB
    vs2005 字体和颜色加载包失败,无法修改的问题
    GridView 编辑和删除的实现
    operamasksui之omGrid简单使用
    ANT简明教程
    ANT从入门到精通
  • 原文地址:https://www.cnblogs.com/Desneo/p/7662302.html
Copyright © 2011-2022 走看看