侧边栏壁纸
博主头像
Terry

『LESSON 5』

  • 累计撰写 90 篇文章
  • 累计创建 21 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Base58编码

Terry
2020-11-07 / 0 评论 / 0 点赞 / 263 阅读 / 419 字 / 正在检测是否收录...

Base58

在看EOS源码时,接触到base58编码。和通常base64编码一样,base58编码的作用也是将非可视字符可视化(ASCII化)。但不同的是base58编码去掉了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。而且因为58 不是2的整次幂,所以没有使用类似base64编码中使用直接截取3个字符转4个字符(38=46 , 2的6次方刚好64)的方法进行转换,而是采用我们数学上经常使用的进制转换方法——辗转相除法(本质上,base64编码是64进制,base58是58进制)。看下base58的编码表:

58进制

也就是字符1代表0,字符2代表1,字符3代表2…字符z代表57。然后回一下辗转相除法。
如要将1234转换为58进制;
第一步:1234除于58,商21,余数为16,查表得H
第二步:21除于58,商0,余数为21,查表得N
所以得到base58编码为:NH
如果待转换的数前面有0怎么办?直接附加编码1来代表,有多少个就附加多少个(编码表中1代表0)。

参考

base58编码原理和实现

0

评论区