一篇文章彻底搞懂Base64编码原理

开发 前端
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现。

 开始

在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现。

[[271461]]

Base64是什么东东呢?

Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一,所以可以依据概括:它是一种编码方式,记住它不是加密的方式,它没有秘钥的概念,任何人拿到数据都能解析出来。它只是一种编码方式!!

到底哪些地方会使用?

我们在参数传输的过程中肯定遇到过这样一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

实现原理

它的来龙去脉我们是知道了,但它的原理我们还不知道,那下面我们就来彻底搞懂它。

Base64编码将一个8位子节序列拆散为6位的片段,而且这每个6位的片段都会被分配一个字符,那这个是个什么字符呢?其实它是base64字母表中的64个字符之一,所以顾名思义base64了。而这64个字符可是有讲究的,是选择了最常用而且兼容性最好的64个字符。所以可以算出base64编码后的字符串大约比编码前大了33%,因为用8位来表示6位。下面的详细的例子,大家来感受下。

Base64还有几个规则如下:

  • ①.3字符变为4字符。
  • ②每76个字符增加一个换行符。
  • ③.结束符也要编码。

例子

加入编码前的数据是“Ow!”,那编码之后是4个字符的base64编码值“T3ch”。下面是具体的转换过程。

1, 字符串"Ow!"被拆分成3个8位的字节(0x4F、0x77、0x21)。看下图:

一篇文章彻底搞懂base64编码原理

2, 这3字节构成了一个24位的二进制 01001111 ,01110111 ,00100001。看下图:

一篇文章彻底搞懂base64编码原理

 

3, 这些为被划分为一些6位的序列010011、110111、011100、1000001。看下图:

一篇文章彻底搞懂base64编码原理

4, 每6位值都表示了从0~63数值,在base64字母表中的都有对应的字符。所以查表转换得出是4字符的字符串“T3ch”。如下图所示转换表。

一篇文章彻底搞懂base64编码原理

整个过程就over了,就是这么简单,大家理解了吗?

总结

大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反,

Base64编码主要用在传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。也可以通过打乱Base64编码来进行加密。

中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2021-08-26 05:27:08

Base64 字节流算法

2021-09-07 08:59:09

编码Base64解码

2017-07-20 16:55:56

Android事件响应View源码分析

2020-06-03 11:06:26

DNS域名缓存

2013-04-15 10:59:08

iOS开发ARC版本说明

2022-05-25 08:31:31

ArthasInstrument

2021-05-18 09:00:28

Pythonclass

2021-08-02 10:01:09

Iterator接口Java项目开发

2020-10-22 08:25:22

JavaScript运作原理

2018-10-22 12:50:20

CDN网络内容发布网络

2021-03-05 09:10:19

base64编码

2021-08-30 10:01:01

Map接口HashMap

2021-08-17 09:55:05

JavaScript MicrotaskPromise

2021-05-27 09:01:14

Python文件读写Python基础

2021-03-08 09:15:46

日志Filebeat运维

2020-07-28 17:27:53

Nginx 负载均衡模块

2023-11-01 15:52:35

2021-04-07 13:28:21

函数程序员异步

2023-04-06 08:37:24

2014-02-20 10:28:28

JavaScriptBase64
点赞
收藏

51CTO技术栈公众号