让每一名学员高薪就业
返回列表 发新帖

你应该了解的编解码技术原理之Base64

[复制链接]

3

主题

4

帖子

60

积分

教师团队

Rank: 7Rank: 7Rank: 7

积分
60

源码时代教师

发表于 2018-2-28 19:22:54  | 显示全部楼层 | 阅读模式
在处理数据传输的过程中,我们经常使用到各种编解码技术,其中Base64是常用的编解码技术之一,那么你知道Base64是如何进行编解码的吗?

Base64简介
Base64是一种二进制到文本编码方案,通过将二进制数据转换为基数-64表示,以可打印的ASCII字符串格式表示二进制数据,每个Base64数字代表正好6位的二进制数据。

Base64编码和解码
Base64依赖于简单的编码和解码算法。它们使用US-ASCII的65个字符的子集,其中前64个字符中的每个字符映射到等效的6位二进制序列。这是字母表:


啊啊.jpg
第65个字符(=)用于将Base64编码的文本填充为整数大小,就像刚才解释的那样。

编码算法接收8位字节的输入流。假定这个流首先排序为最高位:第一位是第一个字节中的高位,第八位是这个字节中的低位,依此类推。
从左到右,这些字节被组织成24位组, 每个组被视为四个连接的6位组。每个6位组索引到64个可打印字符的数组中, 输出结果字符。

当正在编码的数据的末尾有少于24位可用时,零位被添加(在右边)以形成整数个6位组。然后,=可以输出一个或两个填充字符。有两种情况需要考虑:
①剩余的一个字节:将四个零位附加到该字节以形成两个6位组。每个组索引数组,并输出结果字符。在这两个字符之后,=输出两个填充字符。
②剩下的两个字节:将两个零位附加到第二个字节以形成三个6位组。每个组索引数组,并输出结果字符。在这三个字符之后,=输出一个填充字符。

让我们考虑三个示例来了解编码算法的工作原理。首先,假设我们希望编码: @!*

@ !*
二进制 01000000 00100001 00101010

重新按照6位划分的结果: 010000 | 000010 | 000100 | 101010
对应的十进制数字 : 16 | 2 | 4 | 42
对应的字母为 : QCEq
所以将 "@!*" Base64编码的结果为 "QCEq"


现在我们减少一个字符*, 对 "@!" 再次编码 :
按照6位划分的结果(红色的0是因为按照6位划分组,不够而末尾补齐的0): 010000 | 000010 | 000100
对应的十进制数字 : 16 | 2 | 4
对应的字母为 : QCE
但是,我们必须保证一组Base64的结果是24位的整数倍,即四个字符的整数倍,如果不是,则在末尾补齐"="
所以将 "@!" Base64编码的结果为 "QCE="


最后,我们再看看只对 "@"编码的过程 :
按照6位划分的结果(红色的0是因为按照6位划分组,不够而末尾补齐的0): 010000 | 000000
对应的十进制数字 : 16 | 0
对应的字母为 : QA
同理, 末尾补齐"="
所以将 "@" Base64编码的结果为 "QA=="



通过以上的案例展示,相信大家对Base64的编码规则已经了解, 其解码过程相反.


回复

使用道具 举报

5

主题

257

帖子

1924

积分

精英

Rank: 5Rank: 5

积分
1924

活跃用户

QQ
发表于 2018-3-1 09:22:38  | 显示全部楼层
不明觉厉
回复

使用道具 举报

0

主题

119

帖子

1701

积分

精英

Rank: 5Rank: 5

积分
1701

活跃用户

发表于 2018-3-8 10:44:32  | 显示全部楼层
来学习一波,充充电
回复 支持 反对

使用道具 举报

0

主题

119

帖子

1701

积分

精英

Rank: 5Rank: 5

积分
1701

活跃用户

发表于 2018-3-9 09:48:32  | 显示全部楼层
第一次没看懂,好在,又看了一次,懂了
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

最新活动

联系我们

Java培训  |   PHP培训  |   UI培训  |   H5培训  |   Python培训  |   大数据培训  |   如何报名  |   视频下载
快速回复 返回顶部 返回列表