Base64

Base64

  • 定义

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

  • 由来

    对计算机信息存储稍有了解的人,都清楚,在计算机内部是以二进制来存储一切信息的。而直接以二进制为单元进行处理,显然是不方便处理的,如果数量级过大,我们往往采用增加计数单位的形式。例如以每8个bit位组成一个字节。这样任何信息都可以划分为占用多少多少个字节。根据大家的认知,大小写一共52个字母、外加数字加特殊符号等,一个字节是完全可以表述完整的单个字符的(这里使用的就是ASCII对照表)。

  • 应用

    (1) 传输数据,尽量做到数据可以在网络中正常传输,同时不会因为硬件或者软件不兼容,导致数据失真。
    (2) 对数据进行简单加密,如对于URL或者地址空间的处理(如百度云地址、p2p链接),可以通过简单的Base64进行简单的处理,防止肉眼可以直视出这些信息的处理规则。

  • 规则详解

    首先明确这样一个前提,所有信息肯定都是以字节的形式存在的。那么他的长度对于3这个数字有三种分类:

    (1)长度除以3余0:len%3=0;

    (2)长度除以3余1:len%3=1;

    (3)长度除以3余2:len%3=2;

    第(1)情况:

    我们把每3个字节划分成一份,然后再把它平均拆分成4份。那么每份就有6个 bit位。

    38bit=24bit=46bit
    在这里插入图片描述

    然后每一个单元前边再加个00,这样就使得每个单元等等于8位,即一个比特位。
    在这里插入图片描述

    如表,我们可以发现,每个字节真正有效的特征bit位只有6位。2^6=8*8=64。也就是每个字节都可以表现出64种特征。这也正是base64的由来。

    第(2)情况:

    我们把每3个字节划分成一份,然后再把它平均拆分成4份。最后剩余1个字节,则拆分成6+2的形式,8bit=6+2bit,如下表:
    在这里插入图片描述
    这里会涉及到下边两种场景

    1)对于不足6bit位的单元:这个直接在结尾补0,直到6位。这里最后剩余2个bit位。

    2)对于完全没有分配的单元,则直接使用“=”放置在单元中。这里最后补充2个=。
    在这里插入图片描述
    与场景(1)类似,单元格数字前边补‘0’
    在这里插入图片描述
    第(3)情况

    我们把每3个字节划分成一份,然后再把它平均拆分成4份。最后剩余2个字节,则拆分成6+6+4的形式,16bit=6*2+2bit,如下表:
    在这里插入图片描述
    这里与场景(2)类似会涉及到下边两种场景

    1)对于不足6bit位的单元:这个直(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )接在结尾补0,直到6位。这里最后剩余4个bit位。

    2)对于完全没有分配的单元,则直接使用“=”放置在单元中。这里最后补充1个=。
    在这里插入图片描述
    这样,无论信息的长度是多少,都能以这样的规则(base64编码规范),重新划分成新的字节(符)流。

    同时还有一份base64的编码转换表:

    如下表:
    在这里插入图片描述

    这样,无论任意的字节流,我们都可以用表中的字符+‘=’来表示了。这就是所谓的Base64编码过程了。通过Base64编码,我们可以很好的解决前文中遗留下的问题。而对于Base64解码的过程,原理与上述一致,只是一个逆过程,这里不再赘述。

  • 与Base32的区别

    base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式
    base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式
    实现原理与base64相同
    base32索引表如下:
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值