//package com.softright;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class Base64 {
private static final String BASE_64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
private static final char CHAR_PAD='=';
public static String encode(byte[] src) {
if(src==null)
return null;
StringBuffer strRet = new StringBuffer();
int i = 0;
int j = 0;
byte[] char_array_3 = new byte[3];
byte[] char_array_4 = new byte[4];
for (int k=0;k char_array_3[i++] = src[k];
if (i == 3) {
char_array_4[0] = new Integer((char_array_3[0] & 0xfc) >> 2)
.byteValue();
char_array_4[1] = new Integer(((char_array_3[0] & 0x03) << 4)
+ ((char_array_3[1] & 0xf0) >> 4)).byteValue();
char_array_4[2] = new Integer(((char_array_3[1] & 0x0f) << 2)
+ ((char_array_3[2] & 0xc0) >> 6)).byteValue();
char_array_4[3] = new Integer(char_array_3[2] & 0x3f)
.byteValue();
for (i = 0; (i < 4); i++)
strRet.append(BASE_64_CHARS.charAt(char_array_4[i]));
i = 0;
}
}
if (i > 0) {
for (j = i; j < 3; j++)
char_array_3[j] = '\0';
char_array_4[0] = new Integer((char_array_3[0] & 0xfc) >> 2)
.byteValue();
char_array_4[1] = new Integer(((char_array_3[0] & 0x03) << 4)
+ ((char_array_3[1] & 0xf0) >> 4)).byteValue();
char_array_4[2] = new Integer(((char_array_3[1] & 0x0f) << 2)
+ ((char_array_3[2] & 0xc0) >> 6)).byteValue();
char_array_4[3] = new Integer(char_array_3[2] & 0x3f).byteValue();
for (j = 0; (j < i + 1); j++) {
strRet.append(BASE_64_CHARS.charAt(char_array_4[j]));
}
while ((i++ < 3)) {
strRet.append(CHAR_PAD);
}
}
try {
return strRet.toString();
} catch (Exception e) {
return null;
}
}
@SuppressWarnings("unchecked")
public static byte[] decode(String src) {
String strEncoded = null;
try {
strEncoded = src;//java.net.URLDecoder.decode(src, "iso-8859-1");
if(strEncoded==null) return null;
} catch (Exception e) {
return null;
}
int in_len = strEncoded.length();
int i = 0;
int j = 0;
int in_ = 0;
List ret = new ArrayList();
byte[] char_array_3 = new byte[3];
byte[] char_array_4 = new byte[4];
while ((in_len-- > 0) && (strEncoded.charAt(in_) != CHAR_PAD)) {
char_array_4[i++] = (byte) strEncoded.charAt(in_);
in_++;
if (i == 4) {
for (i = 0; i < 4; i++)
char_array_4[i] = new Integer(BASE_64_CHARS
.indexOf(char_array_4[i])).byteValue();
char_array_3[0] = new Integer((char_array_4[0] << 2)
+ ((char_array_4[1] & 0x30) >> 4)).byteValue();
char_array_3[1] = new Integer(((char_array_4[1] & 0xf) << 4)
+ ((char_array_4[2] & 0x3c) >> 2)).byteValue();
char_array_3[2] = new Integer(((char_array_4[2] & 0x3) << 6)
+ char_array_4[3]).byteValue();
for (i = 0; (i < 3); i++)
ret.add(new Byte(char_array_3[i]));
i = 0;
}
}
if (i > 0) {
for (j = i; j < 4; j++)
char_array_4[j] = 0;
for (j = 0; j < 4; j++)
char_array_4[j] = new Integer(BASE_64_CHARS
.indexOf(char_array_4[j])).byteValue();
char_array_3[0] = new Integer((char_array_4[0] << 2)
+ ((char_array_4[1] & 0x30) >> 4)).byteValue();
char_array_3[1] = new Integer(((char_array_4[1] & 0xf) << 4)
+ ((char_array_4[2] & 0x3c) >> 2)).byteValue();
char_array_3[2] = new Integer(((char_array_4[2] & 0x3) << 6)
+ char_array_4[3]).byteValue();
for (j = 0; (j < i - 1); j++)
ret.add(new Byte(char_array_3[j]));
}
byte[] rlt = new byte[ret.size()];
//int k = 0;
for (int k=0;k rlt[k] = ((Byte)ret.get(k)).byteValue();
}
return rlt;
}
public static void main(String[] args)
throws Exception
{
File file=new File("c:\\test.dat");
file.createNewFile();
FileOutputStream out=new FileOutputStream(file);
out.write((decode("EgAHAAAAAAAAAAAAAACqDwAABgIEAFAATgBHADMAywWJUE5HDQoaCgAAAA1JSERSAAAAMAAAADAIAgAAANhgbtAAAAAEZ0FNQQAAsY8L/GEFAAAFgklEQVRYR+2W308cVRTH75OvRpuCBjT2gcS/wUjigz8fmjZ9sTUajTQmajU+tNkaG3XTRItFH5RK1AoGjSKGWuKPLtFCslW0GCiV0vKbhZn9we6yu/zoVigwfs+cmbPDIC0zgPrAzQlh79x77uee8z1nRqmtsRWBrQj8/yLwTWNjzh7xWGxkZLirs7O9/de2ttaW0Jnm5tNYAAscOvgvseOwgbK7xOa7FWz2tJqsvsM5v/FAzoOvtRXOQyScBxtXCYiZnPOf1dU5oV3EfoJ3/vzv4hGngol/9l665AISptWAeIGT2A8QdOIEglP+6ZzHT8yvBYjXiEM/QM6U8ansbo2iXrl9A4Cyn9yWPFYCy9WThsaeKoHhpMxH21JVpYnX74RNN6hs7S14Sgv23T266x7Y8EM7IGrXdvaAp333lvmJ0Jkff5j5VrFTpB9M0ReK4RHzU18qYQKQMGn7C0wAcm2XK4HJD9C5cHiuXbFTKBpM8UARmDAPIGGa/Y6AmCl6oFiYjldWurbLlXArP0AXu7vhkZ0CCIZQgQnzV78nIGYiVpsJQMKEsndtlyv5BEI1LUYICAY9MhBsLBLBjDDN/0GPmCl+sEiYAOTaLldCmP1ECECoLHa6pBET6wnzC1dokpkW+pUwQePCBCDXdgbS2z5EmP0DsVP8BRPriYGECUDCxHXHTAzk3J4Yro92nATQzsce9QPEe9CvGQgmQMYEATHTUpyAmEl6AZhw6rbtRbw9Fg0lYk0T4wTU8FWDfxreybljQzHjGLQiYaLg2UzSC5iGTdN1Cyhef/Zs6/sfVK8XCEcyE0Qgx7S0hJiJQZmJ667imad52ZW+/s6uC1E9rOlRRCjeV3/y01oAHXvn+BtvBg8FDr/40svPVux/fN8TO3ftfvDhR+67v3xVVgnJzCk6b+oLNdNEQM55pAMmM2ACEIcQk5Gx8fGxPi3SqQ2E9cuhaC8BpRI16Ymq9EBwsj+Q/O2AB6DC2albEQnYUkwtDKj5TjXXQVi5Oitag4ODwoRmCBqgsBHQeFdUC8e0UFxrSozWTwzWJPsJKBEOeIsQd0Iju8fIlCMv+Z9U7nOVerc0frgYdr2nkD5JKMpKcop/CGh8SNN69Eg4OhDSe5q0jkattVZrOZEeDKYuegSiTE1XEFB2jxPIquQh9dcvCms4ocxk3YG/Ri7Qo7HRPk3r/Qeg/mA25QXISsHsK8IkEZr+2iJYNJkyH98O6SyOki1cJgh0S94OpskTxbhPVOuK6ecSenMhQiPBbCwwlV6bhkQQRv6IYTMJEMLATHh1G0lFNl9NNvM8DF0RIsv/TAuwjIDMMDtTltarWI4MDbvJgFqt4APIZHKmjB8RTabcSJUREEteU9f/VMm3ShAnFr6Fbl6J7yMR4hLBApy1pmEBzVUSUP7ISiAju5uAEJjMA4aUoUZAnDswgY/KYvl2FAREDSA+wsNAJMmdzSQpg0qgGyP3JDHl9pI5mNLvlYqewEQvsiFqnq4ixR1unikXrCRYmKQ=")));
out.close();
}
}