【算法笔记】Base64和Base58

Page content

这篇文章简单的整理了Base64和Base58

1.Base64介绍

Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。 Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

2.Base64原理

图片备用地址
base64_index

base64的步骤

  1. 将每个字符转成ASCII编码(10进制)
  2. 将10进制编码转成2进制编码
  3. 将2进制编码按照6位一组进行平分
  4. 将6位1组的2进制数高位补零,然后转成10进制
  5. 将10进制数作为索引,从Base64编码表中查找字符
  6. 每3个字符的文本将编码为4个字符长度(3 * 8 = 4 * 6)

图片备用地址
base64_index_02

当长度不够时会补0(后面多出个=号)

图片备用地址
base64_index_01

3.Base58

Base58是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/“符号。

设计Base58主要的目的是:

  • 避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。
  • 不使用”+“和”/“的原因是非字母或数字的字符串作为帐号较难被接受。
  • 没有标点符号,通常不会被从中间分行。
  • 大部分的软件支持双击选择整个字符串。

图片备用地址
base58_index

由于256不能被58所整除,Base58无法像Base64那样子转换为8位元的二进位后依次取出6位元,就可以快速完成转换;因此,Base58编码演算法需要除法运算实现。如果被编码的数据较长,则要用特殊的class来处理大数,在Bitcoin使用了OpenSSL中的BIGNUM:


欢迎大家的意见和交流

email: li_mingxie@163.com