私钥, 公钥 与 地址
私钥:
私钥本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值0或者1
公钥:
公钥是由私钥通过椭圆曲线加密算法(ECDSA)生成的,一个私钥经过椭圆曲线变换之后能够得到公钥,公钥是由65个byte组成的数组(未压缩)
地址:
地址是由公钥变换得到, 通常包含的信息: 类型, 公钥映射, 检验位, bash58
公钥的作用:
对于私钥,公钥和地址来说,公钥作为私钥到地址的中间桥梁,他在交易的验证是最关键的:
- 公钥生成地址,验证发送交易的地址是否和该公钥生成的地址一致
- 公钥验证私钥的签名,用来验证该交易是否使用了正确的私钥签名
- 私钥生成公钥是成对出现,公钥可以生成对应的唯一地址,这样就能确认了该地址发送的交易是否使用了对应的私钥
私钥, 公钥 与 地址
哈希算法 | 私钥编码 (长度不算0x) |
从私钥生成公钥 | 从公钥生成地址 | |
---|---|---|---|---|
BTC | SHA2-SHA256 | WIF格式 Base58并压缩 字符串长度52 |
ECDSA-secp256k1 未压缩: 前缀 04 +x坐标+y坐标压缩: 前缀 03 +x(如果y是奇数),前缀02 +x(如果y是偶数) |
Base58+ RipeMD160(SHA256(PubK)) |
ETH | SHA3-Keccack | 16进制表示, 字符串长度64 |
字符串长度40(不算0x) | 公钥前加上0x |
EOS | SHA2-SHA256 | WIF格式,Base58, 字符串长度51 |
ECDSA-secp256k1|r1 EOS开头,字符串长度53 未压缩: 前缀 04 +x坐标+y坐标压缩: 前缀 03 +x(如果y是奇数),前缀02 +x(如果y是偶数) |
1. 根据原始的私钥生成压缩版的公钥 2. 对第1步的结果ripemd160运算 3. 对第2步的结果取前面四位作为校验和 4. 将前缀 EOS 和 第2步和第3步的结果拼接在一起就得到了地址 |