• Java Base64加密解密


    public class HBase64 {
        // 编码使用的基础字符,存入字符数组中去。
    
        private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@/=".toCharArray();
    
        /**
         * Base64 encode the given 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;
            // /编码的实现过程。
            while (i <= end) {
                int d = ((((int) data[i]) & 0x0ff) << 16)
                        | ((((int) data[i + 1]) & 0x0ff) << 8)
                        | (((int) data[i + 2]) & 0x0ff);
    
                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 (i == start + len - 2) {
                int d = ((((int) data[i]) & 0x0ff) << 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]) & 0x0ff) << 16;
    
                buf.append(legalChars[(d >> 18) & 63]);
                buf.append(legalChars[(d >> 12) & 63]);
                buf.append("==");
            }
            // 返回转换完毕的数据。
            data = null;
            return buf.toString();
        }
    
        /**
         * 对接收的数据进行64解码
         * @param 待解码的字符串
         * @param os 将完成解码的输出流
         * @throws IOException
         */
        private static void decodeII(String s, OutputStream os) throws IOException {
            char[] chData = s.toCharArray();
    
            int i = 0;
            int len = s.length();
            while (true) {
                if (i == len - 1) {
                    break;
                }
                int tri = ((getIndex(chData[i])) << 18)
                        | ((getIndex(chData[i + 1])) << 12)
                        | ((getIndex(chData[i + 2])) << 6)
                        | ((getIndex(chData[i + 3])));
    
                os.write(((tri >> 16) & 255));
                if (chData[i + 2] == '=') {
                    break;
                }
                os.write(((tri >> 8) & 255));
                if (chData[i + 3] == '=') {
                    break;
                }
                os.write((tri & 255));
                i += 4;
            }
        }
    
        /**
         * 返回完成解码的字符串
         * @param 待解码字符串
         * @return
         */
        public static String decode(String s) {
            ByteArrayOutputStream str = new ByteArrayOutputStream();
            try {
                decodeII(s, str);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            String data = str.toString();
            return data;
    
        }
    
        /**
         * 返回字符c在法则字符中的位置值
         * @param 测试字符
         * @return 返回位置值
         */
        public static int getIndex(char c) {
    
            for (int i = 0; i < legalChars.length; i++) {
                if (legalChars[i] == c) {
                    return i;
                }
            }
    
            return -1;
        }
    }

    调用如下:

    byte[] bytes=new byte[];
    HBase64.encode(bytes);
  • 相关阅读:
    C\C++\Java字符串拼接比较
    Visual Assist X支持VS2010高亮显示CUDA代码(Windows 7)
    相似字符串(编程之美2013初赛题2)
    linux mdadm raid阵列重建加速bitmaps文件
    Pig Grunt之简单命令及实例说明
    error: device not found解决
    Spring配置文件错误
    Java贪吃蛇游戏(坐标方法)
    java增强型for循环(三种遍历集合方式)
    酸菜鱼的简单做法
  • 原文地址:https://www.cnblogs.com/wangning-aaron/p/3880781.html
Copyright © 2020-2023  润新知