Base64就是基于英文拼音(大小写各26个共52个)+数字(10个)+两个特殊字符(+/)来实现的一个替换编码。他并非是一个严格意义的加解密的算法,是一种编码的替换格式,对应的编码和值是公开的,比较容易破解,如果加上一些扰码安全性会更高一些!
实现base64加解密目前有三种办法:
第一种:JDK的实现Base64算法
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(src.getBytes());
BASE64Decoder decoder = new BASE64Decoder();
如果是jdk1.8以下,提示找不到这个 BASE64Encoder 解决办法:
https://blog.youkuaiyun.com/liu578182160/article/details/51153022
第二种:CC (CommonsCodes)实现的Base64算法
byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
第三种:BC(BouncyCastle)实现的Base64的算法
byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
Base64算法的应用场景:e-mail;
密钥;证书文件 产生的历史原因:邮件的“历史问题”;
原因是邮件在传输一些非ASCLL码的值,在一些不同的网关或者网络会出现一些问题。
定义:基于64个字符的编码算法。RFC 2045关于Base算法的基本规范;衍生:Base16、Base32、Url Base64;
demo实例代码:
import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
import com.sun.org.apache.bcel.internal.generic.NEW;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import sun.print.resources.serviceui;
/**
* base64加密解密
* @author Lenovo
*
*/
public class Base64Demo {
private static String src = "Hello world";
public static void main(String[] args) {
jdkBase64();
commonCodeBase64();
}
public static void jdkBase64(){
System.out.println("jdkBase64===============================");
try {
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(src.getBytes());
System.out.println("加密 :"+encode);
BASE64Decoder decoder = new BASE64Decoder();
System.out.println("解密 :"+new String(decoder.decodeBuffer(encode)));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void commonCodeBase64(){
System.out.println("commonCodeBase64===============================");
byte[] encodeBase64 = Base64.encodeBase64(src.getBytes());
System.out.println("加密 :"+new String(encodeBase64));
System.out.println("解密 :"+new String(Base64.encodeBase64(encodeBase64)));
}
//此jdk版本过低,jdk1.8以下不适用
public static void bouncyCastleBase64(){
System.out.println("bouncyCastleBase64===============================");
byte[] encodeBase64 = org.bouncycastle.util.encoders.Base64.encoder(src.getBytes());
System.out.println("加密 :"+new String(encodeBase64));
System.out.println("解密 :"+new String(org.bouncycastle.util.encoders.Base64.decoder(encodeBase64)));
}
}