ETH公钥转地址

省流: 地址应该用(非压缩公钥)经过keccak_256生成。

背景:

  1. 公钥地址33bytes,其中第一个byte表示压缩方式(0x02或0x03),例如:

pub_key = 0x0384e6a2d72a63567c9848e7a1f6442f39d62b5f4dd526b1194c4ea674b37ca11d

  1. 地址是20bytes,例如

0x5B27517A7071Dc3C660F102E1b4653D13b994DA6

二、公钥生成地址步骤

1. 由公钥得到椭圆曲线上的点

point_x = pub_key[1:33] # 舍弃压缩标志
point_y = mod_sqrt(x^3+b) # 需要根据压缩标志,恢复point_y

mod_sqrt是根据椭圆曲线上的模开方,不是数学开方,具体需要自己代码实现,或者借用现成库。

2. 生成hash值

hash = keccak_256(point_x+point_y)

注意: point_x+point_y是bytes相加,组成64bytes,也就是非压缩公钥。我发现很少有地方强调这个,自己傻傻得直接用公钥计算,结果总不对!

3. 生成地址

address = hash[-20:0] # 低20bytes
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值