关于Base64的简介,我就不多说了,直接访问以下链接:
http://baike.baidu.com/link?url=-MyL_H_7nBjevmB6pxefFXTOomVM4W4yM6S2Iz5lMxs7Lmpec4ZJ9mP2h5EKqO8BjBf5ODmDvIGKIeaNPp5zWK
代码如下:
import java.util.HashMap;
import java.util.Map;
public class Base64 {
public static String encoding(String src){
StringBuilder result = new StringBuilder();
byte[] tmp = src.getBytes();
for (int i = 0; i < tmp.length; i+=3) {
int tmpSrc = 0;
for (int j = i; j < i+3; j++) {
tmpSrc = tmpSrc<<8;
if(j<tmp.length){
tmpSrc=tmpSrc|tmp[j];
}
}
result.append(subEncoding(tmpSrc));
}
if(tmp.length%3==2){
result.setCharAt(result.length()-1, '=');
}else{
if(tmp.length%3==1){
result.setCharAt(result.length()-1, '=');
result.setCharAt(result.length()-2, '=');
}
}
return result.toString();
}
public static String subEncoding(int aim){
int mode = 63;//111111
int tmp = 0;
String result="";
for (int i = 0; i < 4; i++) {
tmp = aim&(mode<<((3-i)*6));
tmp = tmp>>((3-i)*6);
result+=map(tmp);
}
return result;
}
public static char map(int i){
if(i<26){
return (char) ('A'+i);
}
if(i<52){
return (char) ('a'+i-26);
}
if(i<62){
return (char) ('0'+i-52);
}
switch(i){
case 62 :return '+';
case 63 :return '/';
default :return '.';
}
}
static Map<Character,Integer> map = new HashMap<>();
static{
for (int i = 0; i < 26; i++) {
map.put((char) ('A'+i), i);
}
for (int i = 26; i < 52; i++) {
map.put((char) ('a'+i-26), i);
}
for (int i = 52; i < 62; i++) {
map.put((char) ('0'+i-52), i);
}
map.put('+', 62);
map.put('/', 63);
}
public static String decoding(String src){
StringBuilder result = new StringBuilder();
char[] arr = src.toCharArray();
for (int i = 0; i < arr.length; i+=4) {
int middle = 0;
for (int j = i; j < i+4; j++) {
if(arr[j]=='='){
middle=(middle<<6);
}else{
middle=(middle<<6)|map.get(arr[j]);
}
}
result.append(subDecoding(middle));
}
return result.toString();
}
public static String subDecoding(int aim){
String result = "";
int mode = 255;
for (int i = 0; i < 3; i++) {
int tmp = aim&(mode<<((2-i)*8));
tmp = tmp>>((2-i)*8);
result+=(char)(tmp);
}
return result;
}
public static void main(String[] args) {
String result = encoding("M");
System.out.println(result);
System.out.println(encoding("leasure."));
System.out.println(encoding("easure."));
System.out.println(encoding("asure."));
System.out.println(encoding("sure."));
System.out.println("_______");
System.out.println(decoding("YXN1cmUu"));
System.out.println(decoding("c3VyZS4="));
System.out.println(decoding("ZWFzdXJlLg=="));
System.out.println(decoding("TQ=="));
String src ="VGhlIHRlcm0gQmFzZTY0IHJlZmVycyB0byBhIHNwZWNpZmljIE1JTUUgY29udGVudCB0cmFuc2Zl"+
"ciBlbmNvZGluZy4gSXQgaXMgYWxzbyB1c2VkIGFzIGEgZ2VuZXJpYyB0ZXJtIGZvciBhbnkgc2lt"+
"aWxhciBlbmNvZGluZyBzY2hlbWUgdGhhdCBlbmNvZGVzIGJpbmFyeSBkYXRhIGJ5IHRyZWF0aW5n"+
"IGl0IG51bWVyaWNhbGx5IGFuZCB0cmFuc2xhdGluZyBpdCBpbnRvIGEgYmFzZSA2NCByZXByZXNl"+
"bnRhdGlvbi4gVGhlIHBhcnRpY3VsYXIgY2hvaWNlIG9mIGJhc2UgaXMgZHVlIHRvIHRoZSBoaXN0"+
"b3J5IG9mIGNoYXJhY3RlciBzZXQgZW5jb2Rpbmc6IG9uZSBjYW4gY2hvb3NlIGEgc2V0IG9mIDY0"+
"IGNoYXJhY3RlcnMgdGhhdCBpcyBib3RoIHBhcnQgb2YgdGhlIHN1YnNldCBjb21tb24gdG8gbW9z"+
"dCBlbmNvZGluZ3MsIGFuZCBhbHNvIHByaW50YWJsZS4gVGhpcyBjb21iaW5hdGlvbiBsZWF2ZXMg"+
"dGhlIGRhdGEgdW5saWtlbHkgdG8gYmUgbW9kaWZpZWQgaW4gdHJhbnNpdCB0aHJvdWdoIHN5c3Rl"+
"bXMsIHN1Y2ggYXMgZW1haWwsIHdoaWNoIHdlcmUgdHJhZGl0aW9uYWxseSBub3QgOC1iaXQgY2xl"+
"YW4uDQpUaGUgcHJlY2lzZSBjaG9pY2Ugb2YgY2hhcmFjdGVycyBpcyBkaWZmaWN1bHQuIFRoZSBl"+
"YXJsaWVzdCBpbnN0YW5jZXMgb2YgdGhpcyB0eXBlIG9mIGVuY29kaW5nIHdlcmUgY3JlYXRlZCBm"+
"b3IgZGlhbHVwIGNvbW11bmljYXRpb24gYmV0d2VlbiBzeXN0ZW1zIHJ1bm5pbmcgdGhlIHNhbWUg"+
"T1MgLSBlLmcuIFV1ZW5jb2RlIGZvciBVTklYLCBCaW5IZXggZm9yIHRoZSBUUlMtODAgKGxhdGVy"+
"IGFkYXB0ZWQgZm9yIHRoZSBNYWNpbnRvc2gpIC0gYW5kIGNvdWxkIHRoZXJlZm9yZSBtYWtlIG1v"+
"cmUgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCBjaGFyYWN0ZXJzIHdlcmUgc2FmZSB0byB1c2UuIEZv"+
"ciBpbnN0YW5jZSwgVXVlbmNvZGUgdXNlcyB1cHBlcmNhc2UgbGV0dGVycywgZGlnaXRzLCBhbmQg"+
"bWFueSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLCBidXQgbm8gbG93ZXJjYXNlLCBzaW5jZSBVTklY"+
"IHdhcyBzb21ldGltZXMgdXNlZCB3aXRoIHRlcm1pbmFscyB0aGF0IGRpZCBub3Qgc3VwcG9ydCBk"+
"aXN0aW5jdCBsZXR0ZXIgY2FzZS4gVW5mb3J0dW5hdGVseSBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3"+
"aXRoIG5vbi1VTklYIHN5c3RlbXMsIHNvbWUgb2YgdGhlIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMg"+
"ZG8gbm90IGV4aXN0IGluIG90aGVyIHRyYWRpdGlvbmFsIGNoYXJhY3RlciBzZXRzLiBUaGUgTUlN"+
"RSBCYXNlNjQgZW5jb2RpbmcgcmVwbGFjZXMgbW9zdCBvZiB0aGUgcHVuY3R1YXRpb24gY2hhcmFj"+
"dGVycyB3aXRoIHRoZSBsb3dlcmNhc2UgbGV0dGVycywgYSByZWFzb25hYmxlIHJlcXVpcmVtZW50"+
"IGJ5IHRoZSB0aW1lIGl0IHdhcyBkZXNpZ25lZC4=";
System.out.println(decoding(src));
}
}