几分钟看懂Base64编码原理

Base64简介

Base64是基于64个可打印字符(小写字母a-z,大写字母A-Z,数字0-9,符号"+","/" 再加上作为垫字的"=",实际有65个字符,其他的所有字符都要转换成这个字符集中的字符),用来表示任意二进制数据的方法。

Base64使用缘故

在二进制数据的传输中,常常包含很多无法显示和打印的字符,想要他们正常显示出来,就需要一个二进制到字符串的转换方法。Base64就是一种最常见的二进制编码方法。

常见应用就是Base64用于在HTTP协议下传输数据。由于HTTP协议是超文本传输协议,所以需要将在HTTP协议下传输的二进制数据转换成字符数据,而且网络传输只能传输可打印字符,而在实际网络传输中,传输的数据并不都是可打印字符,比如中文、二进制文件,图片等。为了成功传输这些类型的数据,此时Base64就派上大用场了。

什么是可打印字符:在ASCII码中规定,十进制数字0-31属于非打印控制字符,32-127属于可打印字符(32-126在键盘上能找到对应的字符,32代表键盘中的空格,127代表键盘中的DELETE命令)

Base64编码原理
  1. 按照从左往右的规则,每三个字节作为一组,一共就是24个二进制位。
  2. 将这24个二进制位分为四组,每组6个二进制位。
  3. 之后在每组数据前面添加00,组成每个组8个二进制位,此时变成了32个二进制位,即四个字节
  4. 然后根据下表,得到扩展后的每个字节的对应符号,base64编码方法完成

在这里插入图片描述

具体Base64编码演示

1.“G”、“o”、“d” 三个字符的ASCII值分别是71、111、100,二进制值是01000111、01101111、01100100 ,然后就组成了24位的二进制值010001110110111101100100
2. 将这24个二进制位分成四组,分别得到010001、110110、111101、100100
3.在每组前面添加00,得到00010001、00110110、00111101、00100100
4.根据上表,得到每个值对应Base64编码,分别是:R、2、9、k

在这里插入图片描述

所以,得到字符串"God"的Base64编码为R29k , 如果一组没有三个字节,则是这样处理的

两个字节的情况:

将这两个字节一共16个二进制位,按照上面的规则分成三组,最后一组除了前面加上00之外,后面也要加上00,这样就得到一个三位的Base64编码,再在末尾补上一个"="号。

比如,“Go” 这个字符串是两个字节,可以转化成三组
00010001,00110110,00111100,对应Base64编码分别为:h、3、8,再加上一个"="
号,因此"Go"的Base64编码就是h38=

一个字节的情况:

将这一个字节一共8个二进制位,按照上面的规则分成两组,最后一组除了前面加上00之外,后面也要加上0000,这样就得到一个两位的Base64编码,再在末尾补两个"="号。

比如,“G” 这个字符串是一个字节,可以转化成两组 00010001,00110000,对应Base64编码分别为:R、w,再加上两个"="
号,因此"G"的Base64编码就是Rw==

Java代码实现Base64编码与解码
	public static void main(String[] args) throws UnsupportedEncodingException {    
    	//编码    
    	String encode = Base64.getEncoder().encodeToString("God".getBytes());        
    	System.out.println(encode);   
    	//解码    
    	System.out.println(new String(Base64.getDecoder().decode(encode)));
	}

打印结果:

R29k
God

更多Java后端开发干货,可以关注公众号「 红橙呀 」。

​​在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值