96 lines
2.3 KiB
Java
96 lines
2.3 KiB
Java
package com.zhgd.xmgl.util;
|
|
|
|
import org.apache.commons.codec.binary.Hex;
|
|
|
|
public class Base64 {
|
|
private static char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();
|
|
private static byte[] codes = new byte[256];
|
|
|
|
static {
|
|
for (int i = 0; i < 256; i++)
|
|
codes[i] = -1;
|
|
for (int i = 'A'; i <= 'Z'; i++)
|
|
codes[i] = (byte) (i - 'A');
|
|
for (int i = 'a'; i <= 'z'; i++)
|
|
codes[i] = (byte) (26 + i - 'a');
|
|
for (int i = '0'; i <= '9'; i++)
|
|
codes[i] = (byte) (52 + i - '0');
|
|
codes['+'] = 62;
|
|
codes['/'] = 63;
|
|
}
|
|
public static String encodeBase64(byte[] data) {
|
|
char[] out = new char[((data.length + 2) / 3) * 4];
|
|
for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {
|
|
boolean quad = false;
|
|
boolean trip = false;
|
|
int val = (0xFF & (int) data[i]);
|
|
val <<= 8;
|
|
if ((i + 1) < data.length) {
|
|
val |= (0xFF & (int) data[i + 1]);
|
|
trip = true;
|
|
}
|
|
val <<= 8;
|
|
if ((i + 2) < data.length) {
|
|
val |= (0xFF & (int) data[i + 2]);
|
|
quad = true;
|
|
}
|
|
out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];
|
|
val >>= 6;
|
|
out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];
|
|
val >>= 6;
|
|
out[index + 1] = alphabet[val & 0x3F];
|
|
val >>= 6;
|
|
out[index + 0] = alphabet[val & 0x3F];
|
|
}
|
|
|
|
return new String(out);
|
|
}
|
|
|
|
public static byte[] decodeBase64(char[] data) {
|
|
int len = ((data.length + 3) / 4) * 3;
|
|
if (data.length > 0 && data[data.length - 1] == '=')
|
|
--len;
|
|
if (data.length > 1 && data[data.length - 2] == '=')
|
|
--len;
|
|
byte[] out = new byte[len];
|
|
int shift = 0;
|
|
int accum = 0;
|
|
int index = 0;
|
|
for (int ix = 0; ix < data.length; ix++) {
|
|
int value = codes[data[ix] & 0xFF];
|
|
if (value >= 0) {
|
|
accum <<= 6;
|
|
shift += 6;
|
|
accum |= value;
|
|
if (shift >= 8) {
|
|
shift -= 8;
|
|
out[index++] = (byte) ((accum >> shift) & 0xff);
|
|
}
|
|
}
|
|
}
|
|
if (index != out.length)
|
|
throw new Error("miscalculated data length!");
|
|
return out;
|
|
}
|
|
|
|
/**
|
|
* base64转成16进制
|
|
*
|
|
* @return
|
|
*/
|
|
public static String decodeBase64ByHex(String base64) {
|
|
//解码
|
|
byte[] x = java.util.Base64.getDecoder().decode(base64);
|
|
return Hex.encodeHexString(x);
|
|
}
|
|
|
|
public static void main(String argc[]) {
|
|
|
|
|
|
// String encode = encodeBase64(KeyConstants.MICRO_ADMIN.getBytes());
|
|
// log.info(encode);
|
|
|
|
|
|
}
|
|
}
|