常用编码格式算法

文章目录

    • 1、`base64`
    • 2、`base62x`
    • 3、`url编码`

1、base64

Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045 ~ RFC2049 ,上面有MIME的详细规范。

Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。

Base64 由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上 “符号类” 字符(+, /, =),不同的应用场景又分别研制了 Base64 的各种 “变种”。为统一和规范化 Base64 的输出,Base62x 被视为无符号化的改进版本。

引用:Base64百度百科

按照 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 编码、解码测试
 * 
*/
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 = Base64.getEncoder(); // 获取解码器 Base64.Decoder decoder1 = Base64.getDecoder(); // 编码测试 byte[] encode1 = encoder1.encode(originalStr.getBytes()); 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 = org.apache.commons.codec.binary.Base64.encodeBase64(originalStr.getBytes()); System.out.println(String.format("编码结果:%s", new String(encode2))); // 解码测试 byte[] decode2 = org.apache.commons.codec.binary.Base64.decodeBase64(encode2); System.out.println(String.format("解码结果:%s", new String(decode2))); /* Spring 实现 */ System.out.println("------------Spring 实现------------"); String encodeToString = Base64Utils.encodeToString(originalStr.getBytes()); System.out.println(String.format("编码结果:%s", encodeToString)); System.out.println(String.format("解码结果:%s", new String(Base64Utils.decodeFromString(encodeToString)))); } }

运行结果如下:

常用编码格式算法_第1张图片


2、base62x

Base62x被视为无符号化的改进版本。

码云地址:https://gitee.com/xenxin/Base62x

目前用的人不多,还没有很好的 Java 实现,不过感觉未来会有发展。

相关文章:Base62x比Base64的编码速度更快吗?


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编码遵循下列规则:

每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。

相关文章:

  • java中的url 编码与解码
  • Java URLDecoder 和 URLEncoder 对中文进行编码和解码

Java实现:

/**
    * URLEncoder & URLDecoder 测试
    */
public static void main(String[] args) throws UnsupportedEncodingException {
    /* 测试编码 */
    // 将普通字符串转换成 application/x-www-form-urlencoded 字符串 采用 UTF-8 字符集进行编码
    String encode = URLEncoder.encode("北京大学", "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));
}

运行结果如下:

常用编码格式算法_第2张图片

你可能感兴趣的:(Java,算法)