之前的文章介绍了私钥的生成过程和公钥的生成原理,示例EOS私钥(16进制表示)为 a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b Base58编码后的WIF格式为 5K4AgqVQY98vCYtPK9xbT99ui3FgLFp3j5Vso1dFuVmaVPuppD2 这篇文章介绍从私钥生成EOS公钥的过程。 使用secp256k1标准计算压缩格式公钥 EOS公钥的生成使用的是secp256k1标准的椭圆曲线算法,且生成的是压缩格式的公钥。 可以用Python程序来计算(用16进制的原始私钥进行运算,不是WIF格式私钥) from ecdsa import SigningKey, SECP256k1 private_key = 'a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b' sk = SigningKey.from_string(bytes.fromhex(private_key), curve=SECP256k1) vk = sk.get_verifying_key() x = vk.to_string()[:32] y = vk.to_string()[32:] if y[-1] % 2 == 0: prefix = b'\x02' else: prefix = b'\x03' print((prefix + x).hex()) 运算结果为 03360c18aab0eabbd8b6b26ca8032c693ed1aab28da6eb1d0472eabd8e21233816 这个33字节的16进制数就是压缩格式的公钥,由前缀0x03和椭圆曲线上一点的x坐标构成,且这个点的y坐标为奇数,所以使用03作为前缀。 从压缩格式公钥生成EOS公钥 上一步生成的压缩格式公钥要变成平时见到的EOS公钥(地址),还需经过以下步骤。 1、ripemd160哈希运算,Python代码如下 import hashlib public_key = '03360c18aab0eabbd8b6b26ca8032c693ed1aab28da6eb1d0472eabd8e21233816' h = hashlib.new('ripemd160') h.update(bytes().fromhex(public_key)) print(h.digest().hex()) 结果为一个20字节的16进制数 91c0d18cdc236906575816f05d45379e3dc01ef5 2、取上一步结果值的前4字节作为校验码(checksum) 91c0d18c 3、拼接压缩格式公钥和校验码(37字节) 03360c18aab0eabbd8b6b26ca8032c693ed1aab28da6eb1d0472eabd8e2123381691c0d18c 4、对上一步结果进行base58编码(50个字符) 7F36SKLm2toCBrA9DWV8UHeNLpSwAW2DWYLejcSoFvrrbG3hWT 5、加上前缀EOS(53个字符) EOS7F36SKLm2toCBrA9DWV8UHeNLpSwAW2DWYLejcSoFvrrbG3hWT 现在得到了熟悉的EOS公钥(地址),整个过程用Python实现如下 import hashlib import base58 public_key = '03360c18aab0eabbd8b6b26ca8032c693ed1aab28da6eb1d0472eabd8e21233816' h = hashlib.new('ripemd160') h.update(bytes().fromhex(public_key)) checksum = h.digest()[:4] address = 'EOS' + base58.***encode(bytes().fromhex(public_key) + checksum).decode() print(address) —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
EOS密码学:EOS公钥的生成过程
2020-06-10 松果 来源:区块链网络
LOADING...
相关阅读:
- XONE:2020年黑马交易所的破局之路2020-08-05
- Stegos首次AMA直播回顾2020-08-04
- 孙哥搞事,这个什么Aladdin也搞事?Aladdin说了是为入门级用户贴心打造的2020-08-03
- upupex打造一流的去中心化数字货币新金融2020-08-03
- IPFS 0.5 对内容路由的改进2020-08-01