含义
Base64是一种用64个字符来表示任意二进制数据的方法,可以加密解密。
Base64编码
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
不足补位
原文的字节数不是3的倍数,剩余的字节就在低位用0补全,最后用=填充,解码时 = 会先被去掉。= 的个数范围:0-2,0代表原文字节数是3的倍数,1代表原文字节数剩余字节为2,2代表原文字节数剩余字节为1。
编码表
根据划分的每一份对应的十进制数去Base64编码表中查表,找到对应的字符
举例
转换前 10101101,10111010,01110110
转换后 00101011, 00011011 ,00101001 ,00110110
十进制 43 27 41 54
对应码表中的值 r b p 2
所以上面的24位编码,编码后的Base64值为rbp2
Java实现
加密
- 把字符转换成二进制字节数组
string.getBytes(); 通过
Base64.getEncoder().encodeToString(byte[] arr)把数组加密成Base64字符。解密
通过
Base64.getDecoder().decode(String encodeString)将Base64字符转成字节数组;- 字节数组传入String的构造器,得到原来的字符串。 ```java package Base64ToArray;
import java.util.Base64;
public class Base64Test { public static void main(String[] args) { //encode String str = “I want to be one of the best Coders.”; byte[] encodeArr = str.getBytes(); String encodeString = Base64.getEncoder().encodeToString(encodeArr); System.out.println(“original string:” + str); System.out.println(“encoded string:” + encodeString);
//decodebyte[] decodeArr = Base64.getDecoder().decode(encodeString);String decodeString = new String(decodeArr);System.out.println("decoded string:" + decodeString);}
