base64学习笔记

base64的定义

base64是一种用64个字符来表示任意二进制数据的方法。

为什么使用base64?

我们打开图片文件或视频文件的时候经常会看到乱码或空白的内容。这是为什么呢?计算机中的任何数据都是asc码编码的,而asc码的128~255位不可见字符,这样在表示数据的时候就会让我们看到乱码或者空白的内容了。如果把所有的数据都转换成可见字符就可以了,base64就是把数据都转换成A~Z,a~z,0~9, +, /这64个字符的方法,通过base64我们就可以看到所有的数据了。

base64的转换方法

对于任意的2进制数据,我们划分为3个字节一组。一个字节为8位,3个字节就是24位数据。对于base64的64个字符,如果用字节来表是的话,用6位的2进制数据就可以表示完。由此,3个字节的24位数据,可以切割成4个6位的二进制数据。计算机每一位字节都必须是8位,我们可以再前面补0,来补充成8位的而进制数据。
例如:
adm的asc码为:0x61, 0x64, 0x6d
二进制的表示为:0110 0001 0110 0100 0110 1101
转换成4个字节6位的数据就是: 011000 010110 010001 101101
前面补0就是: 0001 1000, 0001 0110, 0001 0001, 0010 1101
表示成10进制数据就是: 24, 22, 17, 45
把base64所表示的字符做成一张表,A~0 B~1 C~2 …. +~62 /~63
通过查表可以知道:24~Y 22~W 17~R 45~t

如果二进制数据的长度不是3的倍数的情况下,怎么办?在转换后的转换后的数据后面添加1或2个=来表示添加了几个字符。对于二进制数据的转换过程中长度不是6的倍数的就在后面添加0x00补齐。
例如:
admin的asc码为:0x61, 0x64, 0x6d, 0x69, 0x6E
二进制表示为: 0110 0001 ,0110 0100 ,0110 1101 ,0110 1001, 0110 1110
转成6位长的数据(最有一个长度只有4个在后面补0): 011000, 010110, 010001, 101101, 011010, 010110, 111000
前面补0就是:0001 1000, 0001 0110, 0001 0001, 0010 1101, 0001 1010, 0001 0110, 0011 1000
表示成10进制就是:24, 22, 17, 45, 36, 22, 56
查表可得数据: YWRtkW4
添加上一个=的到结果: YWRtkW4=

  • 在URL获得cookie中得到的=容易产生歧义,因此可以去掉=得到base64的数据。由于base64转换都是3个字节数据得到4个数据,最后的base64的数据一定是4的倍数。解码的时候,如果数据不是4的倍数可以再后面添加=后再解码。
  • 在URL中如果的到base64数据中含有+或/,容易造成歧义。有URL safe base64将+和/转换成-和_。

base64表

索引对应的字符索引对应的字符索引对应的字符索引对应的字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

应用场景

1,应用在URL,cookie或网络中传输少量的二进制数据的时候。
2, 电子邮件,或者网络证书等。
3,网络中传输的图片数据。

参考资料

  1. 知乎-为什么要使用base64编码,有哪些情景需求?
  2. 廖雪峰的官方网站-base64
  3. 百度词条-base64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值