EOS公钥解析

管理员组 夜小白 3月前 58

EOS公钥解析

下面从实际使用的EOS公钥,反推出代码中定义的公钥类型:capi_public_key、public_key。

一个常见的EOS公钥是这样的:

EOS5WzNGkYhJuT4F8YDNo61FLmWPRc4Mu5GdBiLRRjwRdYSoSa4m8-

有53个字符,其中前三个字符"EOS"是最后加上的前缀,将其去掉后得:

5WzNGkYhJuT4F8YDNo61FLmWPRc4Mu5GdBiLRRjwRdYSoSa4m8

有50个字符,对其进行Base58解码后,会得到37字节的二进制数据,用十进制表示是这样的:

2 82 224 213 172 158 145 226 15 219 91 166 249 16 59 11 57 3 112 231 121 217 156 147 77 186 113 55 10 245 60 43 241 223 248 87 163

这37个字节中,最后4个字节:223 248 87 163是校验码,将其去掉后得:

2 82 224 213 172 158 145 226 15 219 91 166 249 16 59 11 57 3 112 231 121 217 156 147 77 186 113 55 10 245 60 43 241

总共有33个字节,这就是crypto.hpp中定义的public_key保存的数据,要注意,public_key.data保存的是二进制数据。

在33个字节前,加上算法类型type(secp256k1类型的type值是0),就得到capi_public_key的数据:

0 2 82 224 213 172 158 145 226 15 219 91 166 249 16 59 11 57 3 112 231 121 217 156 147 77 186 113 55 10 245 60 43 241

共有34个字节。

到了这里,我们获得的仍然是公钥,能反推出私钥吗? 不可能的,把上面获得的公钥称为“基础公钥”的话,从私钥推出“基础公钥”,会经历椭圆曲线加密算法和ripemd160哈希算法,这是一个不可逆的过程,只能验证。

因此,保存好私钥就保存好一切,所有加密数据都是从私钥推算出来的。

还没有人收藏过本帖~
最新回复 (2)
  • 管理员组 Surou 3月前
    0 引用 2
    看签名流程的话,最好还是看 eosjs-ecc,代码简洁
    https://github.com/EOSIO/eosjs-ecc/blob/7ec577cad54e17da6168fdfb11ec2b09d6f0e7f0/src/signature.js
  • 管理员组 夜小白 3月前
    0 引用 3
    surou 看签名流程的话,最好还是看 eosjs-ecc,代码简洁 https://github.com/EOSIO/eosjs-ecc/blob/7ec577cad54e17da6168fdfb11ec2b ...
    好的
返回