/**
*
*
*
Copyright 1994 JsonInternational
*
All rights reserved.
*
Created on 19941115
*
Created by Jason
*
*
*/
package cn.ucaner.alpaca.framework.utils.encrypt;
/**
* @Package:cn.ucaner.common.utils.encrypt
* @ClassName:Base64Utils
* @Description:
BASE64加解密工具类
* @Author: - Jason
* @CreatTime:2017年10月25日 下午5:49:33
* @Modify By:
* @ModifyTime:
* @Modify marker:
* @version V1.0
*/
class Base64Utils {
private static char[] base64EncodeChars =new char[] {'A','B','C','D',
'E','F','G','H','I','J','K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X','Y','Z','a','b','c','d',
'e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z','0','1','2','3',
'4','5','6','7','8','9','+','/' };
private static byte[] base64DecodeChars =new byte[] { -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1,62, -1, -1, -1,63,52,53,54,55,56,57,58,59,
60,61, -1, -1, -1, -1, -1, -1, -1,0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, -1,
-1, -1, -1, -1, -1,26,27,28,29,30,31,32,33,34,35,36,37,
38,39,40,41,42,43,44,45,46,47,48,49,50,51, -1, -1, -1,
-1, -1 };
/**
* BASE64加密
* @param data
* @return
*/
protected static String encrypt(byte[] data) {
StringBuffer sb =new StringBuffer();
int len = data.length;
int i =0;
int b1, b2, b3;
while (i < len) {
b1 = data[i++] &0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>>2]);
sb.append(base64EncodeChars[(b1 &0x3) <<4]);
sb.append("==");
break;
}
b2 = data[i++] &0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>>2]);
sb.append(base64EncodeChars[((b1 &0x03) <<4)
| ((b2 &0xf0) >>>4)]);
sb.append(base64EncodeChars[(b2 &0x0f) <<2]);
sb.append("=");
break;
}
b3 = data[i++] &0xff;
sb.append(base64EncodeChars[b1 >>>2]);
sb.append(base64EncodeChars[((b1 &0x03) <<4)
| ((b2 &0xf0) >>>4)]);
sb.append(base64EncodeChars[((b2 &0x0f) <<2)
| ((b3 &0xc0) >>>6)]);
sb.append(base64EncodeChars[b3 &0x3f]);
}
return sb.toString();
}
/**
* Base64 解密
* @param str
* @return
* @throws Exception
*/
protected static byte[] decrypt(String str)throws Exception{
StringBuffer sb =new StringBuffer();
byte[] data = str.getBytes("US-ASCII");
int len = data.length;
int i =0;
int b1, b2, b3, b4;
while (i < len) {
do {
b1 = base64DecodeChars[data[i++]];
}while (i < len && b1 == -1);
if (b1 == -1)
break;
do {
b2 = base64DecodeChars[data[i++]];
}while (i < len && b2 == -1);
if (b2 == -1)
break;
sb.append((char) ((b1 <<2) | ((b2 &0x30) >>>4)));
do {
b3 = data[i++];
if (b3 ==61)
return sb.toString().getBytes("iso8859-1");
b3 = base64DecodeChars[b3];
}while (i < len && b3 == -1);
if (b3 == -1)
break;
sb.append((char) (((b2 &0x0f) <<4) | ((b3 &0x3c) >>>2)));
do {
b4 = data[i++];
if (b4 ==61)
return sb.toString().getBytes("iso8859-1");
b4 = base64DecodeChars[b4];
}while (i < len && b4 == -1);
if (b4 == -1)
break;
sb.append((char) (((b3 &0x03) <<6) | b4));
}
return sb.toString().getBytes("iso8859-1");
}
/**
*For Test By Jason
*/
public static void main(String[] args) {
}
}