Base64的实现原理
Base64算法主要是将给定的字符以字符编码(ASCII、UTF-8)对应的十进制数为基准,做编码操作:
- 第一步:将给定的字符串以字符为单位,转换为对应的字符编码(如ASCII码)。
- 第二步:将获得的字符编码转换成二进制编码。
- 第三步:对获得的二进制码做分组转换操作,没3个8位二进制码为一组,转换成每四个6位二进制码为一组(不足6位时低位补0).这是一个分组变换的过程(3 * 8 = 6 * 4)。
- 第四步:对获得的4-6二进制码补位,向6位二进制添加2位高位0,组成4个8位二进制码。
- 第五步:将获得的4-8二进制码转换为十进制码。
- 第六步:将获得的十进制码转换为Base64字符表中对应的字符。
演示步骤
字符 | A |
---|---|
ASCII码 | 65 |
二进制码 | 01000001 |
4-6二进制码 | 010000 010000 1 |
4-8二进制码 | 00010000 000100002 |
十进制码 | 16 16 |
字符表映射码 | Q Q = =3 |
代码实现
JDK的实现
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
public class IBase64 {
private static String src = "A";
public static void main(String[] args) {
jdkBase64();
}
public static void jdkBase64() {
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(src.getBytes());
System.out.println("encode:" + encode);
BASE64Decoder decoder = new BASE64Decoder();
try {
System.out.println("decoder:" + new String(decoder.decodeBuffer(encode)));
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
commons codec实现
import org.apache.commons.codec.binary.Base64;
public class IBase64 {
private static String src = "A";
public static void main(String[] args) {
commonsCodesBase64();
}
public static void commonsCodesBase64(){
byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
System.out.println("encoder:" + new String(encodeBytes));
byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
System.out.println("decoder:" + new String(decodeBytes));
}
}
输出同上
Bouncy Castle实现
public class IBase64 {
private static String src = "A";
public static void main(String[] args) {
bouncyCastleBase64();
}
public static void bouncyCastleBase64(){
byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
//全路径名
System.out.println("encoder:" + new String(encodeBytes));
byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
System.out.println("decoder:" + new String(decodeBytes));
}
}
输出同上