1.String的public byte[] getBytes()
2.转Base64字符串
3.jdk的版本,jvm运行环境的配置
4.是否使用第三方加密类
5.操作系统版本
此方法作用:使用平台(程序的运行环境)的默认字符集将此String 编码为字节序列,并将结果存储到新的字节数组中
此方法常用重载方法:public byte[] getBytes(Charset charset),即使用指定的字符集,将String编码为字节序列,并将结果存储到新的字节数组中
加密中的坑点:在加密中,String.getBytes()是常用方法,如果不指定字符集,此方法将使用平台默认的字符集来进行编码,这样在接口对接中,很可能因为平台默认编码字符集不一致而加密得到不一致的结果,特别是String中带有中文时
查看平台默认编码集
System.out.println("默认编码:" + System.getProperty("file.encoding"));
可通过IDEA配置JVM编码集
-Dfile.encoding=GBK
验证效果如图(当前默认编码集为UTF-8)

配置idea默认编码集


由以上运行结果可以发现,对于英文来说GBK,UTF-8编码结果是一致的,但是中文编码结果不一致
参考资料:
1.什么是Base64?
2.Base64编码出现换行符
3.Base64百度百科
Base64是一种字符串编码格式,能将任意Binary资料用64种(可打印字符)字元组合(A-Z、a-z、0-9、+、/(还有补位符=)。
Base64的编码规则(RFC822规定):
1.把每三个8Bit的字节转换为四个6Bit的字节,原字节数非3倍数,先转6bit,剩余用=补齐(可参照百度百科)
2.每76个字符需要加上一个回车换行
3.最后的结束符也要处理
加密中的坑点:坑点其实就是编码规则中的第二条,每76个字符需要加上一个回车换行,但是不是所有的编码包都遵循这个规范
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
import java.util.Base64;
public class test {
public static void main(String[] args) throws IOException {
System.out.println("默认编码:" + System.getProperty("file.encoding"));
String englishText = "LisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisaLisa";
String chineseText = "李四";
//1.jdk rt.jar自带的sun.misc.BASE64Encoder
String s = new BASE64Encoder().encodeBuffer(englishText.getBytes());
String r = new String(new BASE64Decoder().decodeBuffer(s));
//2.jdk rt.jar自带的java.util.Base64
String s1 = Base64.getEncoder().encodeToString(englishText.getBytes());
String r1 = new String(Base64.getDecoder().decode(s1));
//3.Apache Commons Codec
String s2 = org.apache.commons.codec.binary.Base64.encodeBase64String(englishText.getBytes());
String r2 = new String(org.apache.commons.codec.binary.Base64.decodeBase64(s2));
System.out.println("------------------------------------");
System.out.println("sun.misc.BASE64Encoder加密:\n"+s);
System.out.println("sun.misc.BASE64Decoder解密:\n"+r);
System.out.println("------------------------------------");
System.out.println("java.util.Base64加密:\n"+s1);
System.out.println("java.util.Base64解密:\n"+r1);
System.out.println("------------------------------------");
System.out.println("org.apache.commons.codec.binary.Base64加密:\n"+s2);
System.out.println("org.apache.commons.codec.binary.Base64解密:\n"+r2);
System.out.println("------------------------------------");
}
}
运行结果如下:

由以上运行结果可以发现,