Base64 使用(java)

Java自带的Base64算法

public void myBase64() {
    try {
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(src.getBytes());
        System.out.println("encode: " + encode);

        BASE64Decoder decoder = new BASE64Decoder();
        String decode = new String(decoder.decodeBuffer(encode));
        System.out.println("decode: " + decode);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

commons-codec的Base64算法

引入commons-codec-1.10.jar

public void commonCodeBase64() {
    byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
    System.out.println("encode: " + new String(encodeBytes));

    byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
    System.out.println("decode: " + new String(decodeBytes));
}

bouncycastle的Base64算法

引入bcprov-jdk15on-154.jar

public void bouncyCodeBase64() {
    byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
    System.out.println("encode: " + new String(encodeBytes));

    byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
    System.out.println("decode: " + new String(decodeBytes));
}

自定义的base64算法

public class HuhxBase64 {
    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 = "I love you, huhx!";
        String encode = base64Encode(input.getBytes());
        System.out.println("encode: " + encode);

        String decode = new String(base64Decode(encode));
        System.out.println("decode: " + decode);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35495339/article/details/91416477