首先区分加密与编码并不是一回事,
本节主要讲述常见的三种编解码方式,分别为:Unicode、URL、Base64。
常见编码算法:
Java常见解码思路:
【本质】:用对应的“字符集”来解二进制码。
// 指定了一种编码方式
byte[] bytes = "中文".getBytes("GBK");
// 用相对应的 “字符集” 方式来解码
String msg = new String(bytes, "GBK");
Unicode编解码
// Unicode编码
String en = UnicodeUtil.toUnicode("中国");
// Unicode解码,\u4e2d\u6587
String msg="\\u4e2d\\u6587";
String s = UnicodeUtil.toString(en);
URL编解码(Java原生)
// URL编码
String en = URLEncoder.encode("中文", StandardCharsets.UTF_8);
String en = URLEncoder.encode("中文", "utf-8");
// URL解码
String de = URLDecoder.decode("%E4%B8%AD%E6%96%87", "utf-8");
Base64编解码
原理解释:原先是8位一字节,即8位二进制数可以表示一字符;现在我们令6位表示一字符,所以如果原来是【Man】,则会被翻译为【TWFu】,即虽然底层的数据量没变(还是24位),但是所表示的数据长度增加了1/3(由 size = 3 变为 size = 4 )。

(3个字节相当于24个比特,对应于4个Base64单元)
另外,如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。【然后】因为被补足的地方会用等于号=作后缀(此时为补足号=而不是6个0代表的索引“A”,这点要分清),所以我们才能经常看到编码的末尾出现等号。

(8与16不能被3整除,24才能被3整除)

(总共65字符 = 64个字符 + 补足符=)
Java原生
// Base64编码
Base64.getEncoder().encodeToString("中国".getBytes());
// Base64解码
byte[] bytes = Base64.getDecoder().decode(a);
String decode = new String(bytes);
String encode = Base64.encode("中国");
String decode = Base64.decodeStr(encode);