原理
1.每个字符按照ASCII编码对应一个8bit,以3字符为一组
2.3*8=24,分成4份,每份6bit,在每份高位添加00,重新合成一个4份8bit数据
3.新的4份8bit数据换算成10进制,得到4个数字
4.根据下面的Base64编码表,得到对应的新的字符
举例:SJJ(能被3整除)
S | J | J | ||
---|---|---|---|---|
ASCII | 83 | 74 | 74 | |
8bit | 01010011 | 01001010 | 01001010 | |
6bit | 010100 | 110100 | 101001 | 001010 |
新8bit | 00010100 | 00110100 | 00101001 | 00001010 |
10进制 | 20 | 52 | 41 | 10 |
结果 | U | O | p | K |
举例:GOOD(不能被3整除)
G | O | O | D | |||||
---|---|---|---|---|---|---|---|---|
ASCII | 71 | 79 | 79 | 68 | ||||
8bit | 01000111 | 01001111 | 01001111 | 01000100 | 00000000 | 00000000 | ||
6bit | 010001 | 110100 | 111101 | 001111 | 010001 | 000000 | 000000 | 000000 |
新8bit | 00010001 | 00110100 | 00111101 | 00001111 | 00010001 | 00000000 | 00000000 | 00000000 |
10进制 | 17 | 52 | 61 | 15 | 17 | 0 | 0 | 0 |
结果 | R | 0 | 9 | P | R | A | = | = |
最后两位纯粹是自动补齐,所以不能直接换成A,而是用特殊符号=进行表示。
java调用
BASE64Encoder encode = new BASE64Encoder();
String base64 = encode.encode(str);
BASE64Decoder decoder = new BASE64Decoder();
String str = new String(decoder.decodeBuffer(base64));