Base64与Base62

简介:

Base64和Base62的目的在都在于将需要传输的内容进行编码,尤其是一些特殊字符(如不可见字符、传输时与协议头冲突的字符)。 在安全领域,base62的编码使用较多。具体编码和解码的方式如下:

Base64编码 

Java代码 
  1. private static char[] encodes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"  
  2.         .toCharArray();  
  3. private static byte[] decodes = new byte[256];  
  4. static {  
  5.     for (int i = 0; i < encodes.length; i++) {  
  6.         decodes[encodes[i]] = (byte) i;  
  7.     }  
  8. }  
  9.   
  10. public static StringBuffer encodeBase64(byte[] data) {  
  11.     StringBuffer sb = new StringBuffer(data.length * 2);  
  12.     int pos = 0, val = 0;  
  13.     for (int i = 0; i < data.length; i++) {  
  14.         val = (val << 8) | (data[i] & 0xFF);  
  15.         pos += 8;  
  16.         while (pos > 5) {  
  17.             sb.append(encodes[val >> (pos -= 6)]);  
  18.             val &= ((1 << pos) - 1);  
  19.         }  
  20.     }  
  21.     if (pos > 0) {  
  22.         sb.append(encodes[val << (6 - pos)]);  
  23.     }  
  24.     return sb;  
  25. }  
  26.   
  27. public static byte[] decodeBase64(char[] data) {  
  28.     ByteArrayOutputStream baos = new ByteArrayOutputStream(data.length);  
  29.     int pos = 0, val = 0;  
  30.     for (int i = 0; i < data.length; i++) {  
  31.         val = (val << 6) | decodes[data[i]];  
  32.         pos += 6;  
  33.         while (pos > 7) {  
  34.             baos.write(val >> (pos -= 8));  
  35.             val &= ((1 << pos) - 1);  
  36.         }  
  37.     }  
  38.     return baos.toByteArray();  
  39. }  

Base62编码  
Java代码 
  1. public static StringBuffer encodeBase62(byte[] data) {  
  2.     StringBuffer sb = new StringBuffer(data.length * 2);  
  3.     int pos = 0, val = 0;  
  4.     for (int i = 0; i < data.length; i++) {  
  5.         val = (val << 8) | (data[i] & 0xFF);  
  6.         pos += 8;  
  7.         while (pos > 5) {  
  8.             char c = encodes[val >> (pos -= 6)];  
  9.             sb.append(  
  10.             /**/c == 'i' ? "ia" :  
  11.             /**/c == '+' ? "ib" :  
  12.             /**/c == '/' ? "ic" : c);  
  13.             val &= ((1 << pos) - 1);  
  14.         }  
  15.     }  
  16.     if (pos > 0) {  
  17.         char c = encodes[val << (6 - pos)];  
  18.         sb.append(  
  19.         /**/c == 'i' ? "ia" :  
  20.         /**/c == '+' ? "ib" :  
  21.         /**/c == '/' ? "ic" : c);  
  22.     }  
  23.     return sb;  
  24. }  
  25.   
  26. public static byte[] decodeBase62(char[] data) {  
  27.     ByteArrayOutputStream baos = new ByteArrayOutputStream(data.length);  
  28.     int pos = 0, val = 0;  
  29.     for (int i = 0; i < data.length; i++) {  
  30.         char c = data[i];  
  31.         if (c == 'i') {  
  32.             c = data[++i];  
  33.             c =  
  34.             /**/c == 'a' ? 'i' :  
  35.             /**/c == 'b' ? '+' :  
  36.             /**/c == 'c' ? '/' : data[--i];  
  37.         }  
  38.         val = (val << 6) | decodes[c];  
  39.         pos += 6;  
  40.         while (pos > 7) {  
  41.             baos.write(val >> (pos -= 8));  
  42.             val &= ((1 << pos) - 1);  
  43.         }  
  44.     }  
  45.     return baos.toByteArray();  
  46. }  


本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/423544,如需转载请自行联系原作者
相关文章
|
4月前
|
存储 XML 数据格式
深入理解Base64编码
【8月更文挑战第20天】
171 0
|
7月前
|
XML 存储 算法
BASE64的算法说明
【5月更文挑战第10天】BASE64的算法说明
59 3
|
机器学习/深度学习 算法 数据可视化
Induction base
Induction base 是一种基于归纳推理的算法或方法,通常用于解决机器学习或数据挖掘中的问题,特别是关联规则挖掘和分类问题。其基本思想是基于一些基本的规则或假设,通过反复应用于数据来推导出更复杂的规则或结论。
39 1
|
C语言
BASE系列
BASE系列
122 0
|
存储 索引
Base64编码
通过阅读本篇文章,你可以了解到: 1、Base64 编码的作用 2、Base64 编码的规则 3、Base64 索引表
235 0
Base64编码
|
运维 算法 数据挖掘
Proximity-Base Approaches|学习笔记
快速学习 Proximity-Base Approaches
Proximity-Base Approaches|学习笔记
|
存储 算法 Java
md5base64 是什么,md5 base64使用场景, base64优势,Android 使用md5
md5base64 是什么,md5 base64使用场景, base64优势,Android 使用md5
306 0
|
JavaScript PHP
Base64初探
base64是一种编码格式。
935 0
Base64初探