Base64编码说明
Base64一种编码方式,编码方式并不是加密而是通过某种方式将数据在传输的时候更加方便。
Base64是网络上最常见的用于8Bit字节码的编码方式之一,Base64就是一种基于64个可以打印字符来表示二进制数据的方法。
说的再简单一点Base64编码就是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性。
原理规则
- 1、把3个字节变成4个字节。
- 2、每个76个字符加一个换行符。
- 3、最后的结束符也要处理。
例一
我们举个简单的例子,Hello world
的编码过程。
首先我们要将Hello world
通过ASll对照表,我们先将器对应的十六进制找出来。下方有Ascii对照表。
0x48 65 6C 6C 6F 20 57 6F 72 6C 64
找出对应的16进制之后,转为二进制。
16进制 | 二进制 |
---|---|
48 | 01001000 |
65 | 01100101 |
6C | 01101100 |
6C | 01101100 |
6F | 01101111 |
20 | 00100000 |
57 | 01010111 |
6F | 01101111 |
72 | 01110010 |
6C | 01101100 |
64 | 01100100 |
之后将对应二进制数据,三个一组然后再将一组分为四组。分完后应该每组有6位,在前面填上两个0凑成8位。说的有点绕举个简单的例子。
01010101 11101101 11010110
分成四组后
00010101 00011110 00110111 00010110
好之后我们将上面Hello World
的二进制数据分一下
00010010 00000110 00010101 00101100 00011011 00000110 00111100 00100000 00010101 00110110 00111101 00110010 00011011 00000110 0001000
转化为10进制
18 6 21 44 27 6 60 32 21 54 61 50 27 6 4
然后按照对照表进行对照可以得到SGVsbG8gV29ybGQ
,这就是通过Base64编码过后的数据。
java两种实现Base64加密的方式
我们通过这两种方式来验证上面,我们手动算出的对不对。
//方式一
@Test
void contextLoads() throws IOException {
String str = "Hello World";
//加密
byte[] encode = Base64.getEncoder().encode(str.getBytes());
String encodeStr = new String(encode);
System.out.println(encodeStr);
//解密
byte[] decode = Base64.getDecoder().decode(encodeStr);
String decodeStr = new String(decode);
System.out.println(decodeStr);
}
//方式二
@Test
public void test() throws IOException {
String str = "Hello World";
//加密
String encode = new BASE64Encoder()