含义

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 - 图1

编码表

根据划分的每一份对应的十进制数去Base64编码表中查表,找到对应的字符
base64 - 图2

举例

转换前 10101101,10111010,01110110
转换后 00101011, 00011011 ,00101001 ,00110110
十进制 43 27 41 54
对应码表中的值 r b p 2
所以上面的24位编码,编码后的Base64值为rbp2
base64 - 图3

Java实现

加密

  1. 把字符转换成二进制字节数组string.getBytes()
  2. 通过Base64.getEncoder().encodeToString(byte[] arr)把数组加密成Base64字符。

    解密

  3. 通过Base64.getDecoder().decode(String encodeString)将Base64字符转成字节数组;

  4. 字节数组传入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);

  1. //decode
  2. byte[] decodeArr = Base64.getDecoder().decode(encodeString);
  3. String decodeString = new String(decodeArr);
  4. System.out.println("decoded string:" + decodeString);
  5. }

} ```

参考

https://blog.csdn.net/my_angle2016/article/details/90371059