Base64编码解析
Base64编码解析
计算机单位解析
一、位,字节,的定义
1.bit(Binary Digits)就是二进制数字中的位,是信息量的度量单位,为信息量的最小单位,也叫比特位,存放一位二进制数,即0或1,是计算机表示数据最小的单位。 (b)
2.byte就是字节,字节(Byte)是计量单位,是计算机的基本存储单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位.通常情况下一字节等于8位,一个字节由8个相邻的二进制位组成,每个位由0或1组成。字节是计算机技术中最小的可操作存储单位。 (B)
ASCII 使用 7 位二进制 表示字符,总共可以表示 2⁷ = 128 个字符
虽然是 7 位,但通常用 8 位(1 字节)存储
二、换算
- 1byte=8bit
- 1KB=1024B
- 1MB=1024KB
- 1G=1024MB
- 1tb=1024gb
- 1pb=1024tb
- 1字节=8位二进制=2个十六进制字符
三、字节与字符
字符的定义:
字符(Character)计算机中使用的字母、数字、字和符号,比如’A’、’B’、’$’、’&’等。
一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。
- ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
- UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
- Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
- 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
- UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
- UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。
base64原理解析
1.base64是什么:
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2^6=64,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。
——维基百科
它不是一种加解密技术,是一种简单的编解码技术。
Base64 常用于表示、传输、存储二进制数据,也可以用于将一些含有特殊字符的文本内容编码,以便传输。
比如:
- 在电子邮件的传输中,Base64 可以用来将 binary 的字节序列,比如附件,编码成 ASCII 字节序列;
- 将一些体积不大的图片 Base64 编码后,直接内嵌到网页源码里;
- 将要传递给 HTTP 请求的参数做简单的转换,降低肉眼可读性;
注:用于 URL 的 Base64 非标准 Base64,是一种变种。 - 网友们在论坛等公开场合习惯将邮箱地址 Base64 后再发出来,防止被爬虫抓取后发送垃圾邮件。
2.base64编码原理:
标准 Base64 里的 64 个可打印字符是 A-Za-z0-9+/
,分别依次对应索引值 0-63。
其中:
A-Z
、a-z
、0-9
共 62 个字符
+
和 /
用作填充字符
=
用作填充符,使数据长度对齐到 4 字节
具体步骤:
将输入数据转换为二进制
将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
将上面的24个二进制位每6个一组,共分为4组,每组对应 Base64 字符集中的一个字符,根据 Base64 字符集查找对应字符
如果数据长度不是 3 的倍数,则先进行补0处理,再使用
=
填充- 如果最后剩下 1 个字节,那么将补 4 个 0 位,编码成 2 个 Base64 字符,然后补两个
=
- 如果最后剩下 2 个字节,那么将补 2 个 0 位,编码成 3 个 Base64 字符,然后补一个
=
- 如果最后剩下 1 个字节,那么将补 4 个 0 位,编码成 2 个 Base64 字符,然后补两个
参考文章:
https://zhuanlan.zhihu.com/p/111700349