常⽤编码格式算法
⽂章⽬录
1、base64
Base64 是⽹络上最常见的⽤于传输 8Bit 字节码的编码⽅式之⼀,Base64 就是⼀种基于 64 个可打印字符来表⽰⼆进制数据的⽅法。可查看 RFC2045 ~ RFC2049 ,上⾯有MIME的详细规范。
Base64 编码是从⼆进制到字符的过程,可⽤于在 HTTP 环境下传递较长的标识信息。采⽤ Base64 编码具有不可读性,需要解码后才能阅读。
Base64 由于以上优点被⼴泛应⽤于计算机的各个领域,然⽽由于输出内容中包括两个以上 “符号类” 字符(+, /, =),不同的应⽤场景⼜分别研制了 Base64 的各种 “变种”。为统⼀和规范化 Base64 的输出,Base62x 被视为⽆符号化的改进版本。
引⽤:
按照 RFC2045 的定义,Base64 被定义为:Base64 内容传送编码被设计⽤来把任意序列的 8位字节 描述为⼀种不易被⼈直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http 加密,截取 http 信息,你就会发现登录操作的⽤户名、密码字段通过 BASE64 加密的。
BASE64 的加密解密是双向的,可以求反解。
案例实现:
/**
* Base64 编码、解码测试
* <br/>
*/
class Base64Test {
public static void main(String[] args){
// 待编码的字符
String originalStr ="111111";
System.out.println(String.format("待编码的字符: %s", originalStr));
/* jdk 实现 */
System.out.println("=================jdk实现=================");
// 获取编码器
Base64.Encoder encoder1 = Encoder();
// 获取解码器
Base64.Decoder decoder1 = Decoder();
// 编码测试
byte[] encode1 = Bytes());
System.out.println(String.format("编码结果:%s",new String(encode1)));
// 解码测试
byte[] decode1 = decoder1.decode(encode1);
System.out.println(String.format("解码结果:%s",new String(decode1)));
/* Apache commons-codec 实现 */
System.out.println("=================Apache commons-codec 实现=================");
// 编码测试
byte[] encode2 = dec.Bytes());
System.out.println(String.format("编码结果:%s",new String(encode2)));
// 解码测试
byte[] decode2 = dec.binary.Base64.decodeBase64(encode2);
System.out.println(String.format("解码结果:%s",new String(decode2)));
/* Spring 实现 */
System.out.println("------------Spring 实现------------");
String encodeToString = Bytes());
System.out.println(String.format("编码结果:%s", encodeToString));
System.out.println(String.format("解码结果:%s",new String(Base64Utils.decodeFromString(encodeToString)))); }
}
运⾏结果如下:
2、base62x
Base62x被视为⽆符号化的改进版本。
⽬前⽤的⼈不多,还没有很好的 Java 实现,不过感觉未来会有发展。
相关⽂章:
3、url编码
url编码 是⼀种浏览器⽤来打包表单输⼊的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排⾏等等)作为URL的⼀部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输⼊格式样⼦象这样:
theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
当URL地址⾥包含⾮西欧字符的字符串时,系统会将这些字符转换成 application/x-www-form-urlencoded 字符串,表单⾥提交时也是如此,当包含⾮西欧字符的字符串时,系统也会将这些字符转换成 application/x-www-form-urlencoded 字符串。
URL编码遵循下列规则:
url编码处理
每对name/value由&;符分开;每对来⾃表单的name/value由=符分开。如果⽤户没有输⼊值给这个name,那么这个name还是出现,只是⽆值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%⽤⼗六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是⼀个字符ascii码的⼗六进制。不过稍微有些变动,需要在前⾯加上“%”。⽐如“\”,它的ascii码是92,92的⼗六进制是5c,所以“\”的url编码就是%5c。
相关⽂章:
Java实现:
/**
* URLEncoder & URLDecoder 测试
*/
public static void main(String[] args)throws UnsupportedEncodingException {
/* 测试编码 */
/
/ 将普通字符串转换成 application/x-www-form-urlencoded 字符串采⽤ UTF-8 字符集进⾏编码    String encode = de("北京⼤学","UTF-8");
System.out.println(String.format("编码结果:%s", encode));
/* 测试解码 */
//将 application/x-www-form-urlencoded 字符串转换成普通字符串采⽤ UTF-8 字符集进⾏解码    String decode = URLDecoder.decode(encode,"UTF-8");
System.out.println(String.format("解码结果:%s", decode));
}
运⾏结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。