区块链:Base64编码和Base58编码

原帖收藏于IT老兵驿站

前言

接触base64有很久了,其实一直没有理解base64这种编码的根本原理,或者说是设计意图,今天又读了一遍,终于开窍了,请看下图。

Base64 table

原始值显示值原始值显示值原始值显示值原始值显示值
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

什么意思呢?我这样理解,在计算机里面,所有信息都是以二进制的方式承载的,即01,这二进制如何去表达我们想要显示(printable)的信息呢?这个时候ASCII码就出现了,以及后来的UniCode等等,它们是以字节为单位来处理,一个字节是8位,这也是计算机系统里面的一个标准处理单位。

而Base64的目的不是这个,它是要把一段信息显示成另外的一个形式,变成不可直接读,这样尤其是在邮件传输时,可以增加一点安全性。所以,它是以6位为一个单位来处理,对应上面的这个码表,来显示的。Base58是Base64的子集,它的码表元素就更少了,少了8个( 0 , O (大写O),I (大写i) ,l (小写L) , + (加号) ,/ (后倒线)),现在被用于区块链领域。

6位的处理会造成有的时候,不够一个字节,后面需要多补一个到两个字节的0来补齐长度,统一用=显示。

以下这个例子取自维基百科

Source text (ASCII)Ma
Source octets77 (0x4d)97 (0x61)
Bit pattern0 1 0 0 1 10 1 0 1 1 0
Index1922
Base64-encodedTW
Encoded octets84 (0x54)87 (0x57)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值