zoukankan      html  css  js  c++  java
  • java Base64算法的使用

      Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息。详见 Base64介绍

    1 自定义的base64算法

    Base64Encrypt.java

    public class Base64Encrypt {
        private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
        // base64解密
        private static byte[] base64Decode(String input) {
            if (input.length() % 4 != 0) {
                throw new IllegalArgumentException("Invalid base64 input");
            }
            byte decoded[] = new byte[((input.length() * 3) / 4)
                    - (input.indexOf('=') > 0 ? (input.length() - input.indexOf('=')) : 0)];
            char[] inChars = input.toCharArray();
            int j = 0;
            int b[] = new int[4];
            for (int i = 0; i < inChars.length; i += 4) {
                // This could be made faster (but more complicated) by precomputing
                // these index locations.
                b[0] = CODES.indexOf(inChars[i]);
                b[1] = CODES.indexOf(inChars[i + 1]);
                b[2] = CODES.indexOf(inChars[i + 2]);
                b[3] = CODES.indexOf(inChars[i + 3]);
                decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));
                if (b[2] < 64) {
                    decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));
                    if (b[3] < 64) {
                        decoded[j++] = (byte) ((b[2] << 6) | b[3]);
                    }
                }
            }
            return decoded;
        }
    
        // base64加密
        private static String base64Encode(byte[] in) {
            StringBuilder out = new StringBuilder((in.length * 4) / 3);
            int b;
            for (int i = 0; i < in.length; i += 3) {
                b = (in[i] & 0xFC) >> 2;
                out.append(CODES.charAt(b));
                b = (in[i] & 0x03) << 4;
                if (i + 1 < in.length) {
                    b |= (in[i + 1] & 0xF0) >> 4;
                    out.append(CODES.charAt(b));
                    b = (in[i + 1] & 0x0F) << 2;
                    if (i + 2 < in.length) {
                        b |= (in[i + 2] & 0xC0) >> 6;
                        out.append(CODES.charAt(b));
                        b = in[i + 2] & 0x3F;
                        out.append(CODES.charAt(b));
                    } else {
                        out.append(CODES.charAt(b));
                        out.append('=');
                    }
                } else {
                    out.append(CODES.charAt(b));
                    out.append("==");
                }
            }
            return out.toString();
        }

    测试代码:

        public static void main(String[] args) {
            String input = "we are a team.";
            String encode = base64Encode(input.getBytes());
            System.out.println("encode: " + encode);
    
            String decode = new String(base64Decode(encode));
            System.out.println("decode: " + decode);
        }

    2 bcprov的Base64算法

      引入bcprov-jdk15on-154.jar,提供对base64算法的支持

    bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi

      测试代码:

    String input ="we are a team .";
     byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(input.getBytes());
        System.out.println("encode: " + new String(encodeBytes));
    
        byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
        System.out.println("decode: " + new String(decodeBytes));
  • 相关阅读:
    python之数据规范化(Min-Max规范化)
    python对全班成绩进行数据清洗(pandas的使用)
    python统计全班的成绩(numpy的使用)
    python爬虫之动态渲染页面抓取-(Selenium)的使用
    python之小米应用商店搜索
    python之小米应用商店爬虫
    cmds系统数据库源端大表数据更新优化
    临时表空间扩容
    性能优化概要(2)数据库时间,监控和优化工具
    cmds挖掘redolog
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/5797864.html
Copyright © 2011-2022 走看看