简介:
base64 是在加密过程对byte转换为string的一个过程,解密过程则是对string转换为byte的过程。
算法:
byte转换:
1、将原byte 由3个,3个分成一组, 不足3个的为一组
2、将3个byte,一次统一右移两位,然后高位补两个0 , 剩下的补上前一个字节移出来的字符(2个 4个或者6个bit)。这样3个byte一组会统一转成4个byte一组。
3、不足3个的一组 出来的 在4个byte中以‘=’的byte值填充。
4个一组的byte 到 string的转换:
1、构造码表(加密表与解密表)
2、加密表构造原则:加密表的长度是64,加密表的值(ascii码值)是解密表的索引
3、解密表构造原则:长度一般为128,解密表的值是加密表的索引
4、根据4个一组(由于前两位为0,所以最大值是 2^6 - 1)的byte值 用加密表得到字母值
5、通过字母值作为索引用解密表 得到4个一组的byte
6、将4个一组的byte 逆变换会 3个一组的byte
7、然后byte再到其他数据结构如(字符串,文件等等)
实现一套简易的带自定义码表和移位操作的base64:
package base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayOutputStream;
/**
* Created by hp on 15-3-29.
*/
public class NewBase64 {
private Logger logger = LoggerFactory.getLogger(NewBase64.class);
private static final int RANGE = 0xff;
//自定义码表 可随意变换字母排列顺序,然后会自动生成解密表
private static final char[] Base64ByteToStr = new char[] {
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',// 0 ~ 9
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',