为什么会出现Base64
来源:https://www.zhihu.com/question/36306744/answer/71626823
在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
Base64主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成ASCII字符。
Base64原理
来源:https://blog.csdn.net/qq_36522306/article/details/80753099
它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。
image.png
例如:
详细案例:http://blog.xiayf.cn/2016/01/24/base64-encoding/
三个字节,每个字节8bit,共计24bit;而Base64是6bit为一个单元,就需要4个单元(即3个字节需要用4个可打印字符来表示)
Base64编码后长度变长:
编码后的数据比原始数据略长,为原来的4/3 (Base64编码的长度永远是4的倍数)
实现Base64加解密的方式主要有以下四种(推荐度由低到高):
来源:https://blog.csdn.net/u012187452/article/details/83239117
1:JDK中的sun.misc套件
2:第三方扩展包 bouncy castle
3:第三方扩展包 commons codec
4:JDK8及更高版本中的 java.util.Base64
Base64实现代码
来源:
https://blog.csdn.net/zdqdj1/article/details/51760412
https://www.cnblogs.com/smile361/p/6362075.html
十六进制编码和base64编码后的数据量:
来源:https://segmentfault.com/q/1010000000801988/a-1020000002230260
选用十六进制编码和 Base64 编码的情况比较多,主要是因为这两种编码易用,而且转换后的数据量相对较小。
十六进制编码是将 1 个字节编码成 2 个十六进制字符,比如 0x10110110 编码成 B6,转换后数据量会增大 1 倍。即 编码后数据量 = 原先数据量 * 2。
Base64 编码是将 3 个字节共 24 位数据,以每 6 位一个 Base64 字符 [0-9a-zA-Z+/] 表示,24 位数据共需要 4 个 Base64 字符表示,编码后数据增长约 1/3。为什么是“约”?因为如果原数据字节数不是 3 的倍数,需要补位,这样转换出来的数据量就会比原来的 4/3 略多一点。
从上面的数据增长比来看,Base64编码 比十六进制编码更节省磁盘容量,所以一般较大的数据需要进行 ASCII 编码多采用 Base64;而较小的数据,则使用易于人工识别十六进制(用纸笔就能解码出来)。
网友评论