BASE64的编码以及注意事项
来源:互联网 发布:程序员的算法趣题pdf 编辑:程序博客网 时间:2024/06/08 14:53
package com.example.des1;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;public class Base64 {private static final char[] legalChars = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();/** * data[] 进行编码 */public static String encode(byte[] data){int start = 0;int len = data.length;StringBuffer buf = new StringBuffer(data.length * 3 / 2);int end = len - 3;int i = start;int n = 0;while(i <= end){int d = ((((int) data[i]) & 0x00ff) << 16)| ((((int) data[i + 1]) & 0x00ff) << 8)| (((int) data[i + 2]) & 0x00ff );buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append(legalChars[(d >> 6) & 63]);buf.append(legalChars[d & 63]);i += 3;if (n++ >= 14){n = 0;buf.append("");}}if (i == start + len - 2){int d =((((int)data[i]) & 0x00ff) << 16)| ((((int)data[i + 1]) & 255) << 8);buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append(legalChars[(d >> 6) & 63]);buf.append("=");}else if (i == start + len -1){int d = (((int)data[i]) & 0x00ff) << 16 ;buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append("==");}return buf.toString();}private static int decode(char c){if (c >= 'A' && c <= 'Z')return ((int) c) -65;else if (c >='a' && c <= 'z')return((int) c) - 97 + 26;else if (c >= '0' && c <= '9')return ((int) c) -48 + 26 + 26;else switch(c){case '+' :return 62;case '/' :return 63;case '=' :return 0;default:throw new RuntimeException("unexcepted code" + c);}}/** * Decodes the given Base64 encoded String to a new byte array. The byte * array holding the decoded data is returned. */ public static byte[] decode(String s){ByteArrayOutputStream bos = new ByteArrayOutputStream();try {decode(s,bos);}catch(Exception e) //为何IOException 会报错??????//{//throw new RuntimeException();//}//catch (Exception e) {// TODO Auto-generated catch blockthrow new RuntimeException();}byte[] decodedBytes = bos.toByteArray();try{bos.close();}catch(IOException ex){System.err.println("Error while decoding base64" + ex.toString());}return decodedBytes;}private static void decode(String s, OutputStream os) throws Exception{int i = 0;int len = s.length();while(true){while (i < len && s.charAt(i) <=' ')i++;if (i == len)break;int tri = (decode(s.charAt(i)) << 18) + (decode(s.charAt(i + 1)) << 12)+ (decode(s.charAt(i + 2)) << 6) + (decode(s.charAt(i + 3)));os.write((tri >> 16) & 255);if (s.charAt(i + 2) == '=')break;os.write((tri >> 8) & 255);if (s.charAt(i + 3) == '=')break;os.write(tri & 255);i += 4;}}}
private static final char[] legalChars = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
编程时 红色字体不能改变顺序或者数量,否则不能正常编码,因为索引是按下图的顺序来的。
所以任何一点输入差错,都没办法正常运行。
BASE64算法原理:点击打开链接
0 0
- BASE64的编码以及注意事项
- base64编码以及url safe base64是怎么工作的?
- base64编码以及url safe base64是怎么工作的?
- AES加密以及BASE64编码
- 图片的base64编码实现以及网页上显示
- 编码提取以及Base64编码转换工具
- 关于Base64编码的
- 奇妙的Base64编码
- base64编码的代码!
- base64编码的用处~
- 奇妙的Base64编码
- 字符串的编码Base64
- 奇妙的Base64编码
- j2me的Base64编码
- Base64编码的来龙去脉
- 奇妙的Base64编码
- 奇妙的Base64编码
- Flex的Base64编码
- 转:DB2中实现Oracle的功能
- Spring Security教程(9)---- 自定义AccessDeniedHandler
- 自己用
- HTML5画布转换状态栈教程
- 快速计算星期几,就是最强大脑
- BASE64的编码以及注意事项
- IT职场: 选择外企利与弊
- Apache的配置
- 办理护照的流程
- 男才女貌
- vs2003加载公司系统
- Linux下区分物理CPU、逻辑CPU和CPU核数
- 事业与家庭谈
- vs2003DataGrid调试错误