Java Base64Utils
目录
Java Base64Utils
7 |
/**
* <html>
* <body>
* <P> Copyright 1994 JsonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 19941115</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.alpaca.framework.utils.encrypt;
/**
* @Package:cn.ucaner.common.utils.encrypt
* @ClassName:Base64Utils
* @Description: <p> BASE64加解密工具类</p>
* @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) {
}
}
|
分类: JavaUtils 标签: java工具