base64的編碼,解碼演算法如下:
public class Base64<br />{<br /> /**<br /> * 將未經處理資料編碼為base64編碼<br /> */<br /> static public char[] encode(byte[] data)<br /> {<br /> char[] out = new char[((data.length + 2) / 3) * 4];</p><p> for (int i = 0, index = 0; i < data.length; i += 3, index += 4)<br /> {<br /> boolean quad = false;<br /> boolean trip = false;<br /> int val = (0xFF & (int) data[i]);<br /> val <<= 8;<br /> if ((i + 1) < data.length)<br /> {<br /> val |= (0xFF & (int) data[i + 1]);<br /> trip = true;<br /> }<br /> val <<= 8;<br /> if ((i + 2) < data.length)<br /> {<br /> val |= (0xFF & (int) data[i + 2]);<br /> quad = true;<br /> }<br /> out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];<br /> val >>= 6;<br /> out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];<br /> val >>= 6;<br /> out[index + 1] = alphabet[val & 0x3F];<br /> val >>= 6;<br /> out[index + 0] = alphabet[val & 0x3F];<br /> }<br /> return out;<br /> }<br /> /**<br /> * 將base64編碼的資料解碼成未經處理資料<br /> */<br /> static public byte[] decode(char[] data)<br /> {<br /> int len = ((data.length + 3) / 4) * 3;<br /> if(data.length > 0 && data[data.length - 1] == '=')<br /> --len;<br /> if(data.length > 1 && data[data.length - 2] == '=')<br /> --len;<br /> byte[] out = new byte[len];<br /> int shift = 0;<br /> int accum = 0;<br /> int index = 0;<br /> for(int ix = 0; ix < data.length; ix++)<br /> {<br /> int value = codes[data[ix] & 0xFF];<br /> if(value >= 0)<br /> {<br /> accum <<= 6;<br /> shift += 6;<br /> accum |= value;<br /> if(shift >= 8)<br /> {<br /> shift -= 8;<br /> out[index++] = (byte)((accum >> shift) & 0xff);<br /> }<br /> }<br /> }<br /> if(index != out.length)<br /> throw new Error("miscalculated data length!");<br /> return out;<br /> }</p><p> static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();</p><p> static private byte[] codes = new byte[256];<br /> static {<br /> for (int i = 0; i < 256; i++)<br /> codes[i] = -1;<br /> for (int i = 'A'; i <= 'Z'; i++)<br /> codes[i] = (byte) (i - 'A');<br /> for (int i = 'a'; i <= 'z'; i++)<br /> codes[i] = (byte) (26 + i - 'a');<br /> for (int i = '0'; i <= '9'; i++)<br /> codes[i] = (byte) (52 + i - '0');<br /> codes['+'] = 62;<br /> codes['/'] = 63;<br /> }</p><p> public static void main(String[] args) throws Exception<br /> {<br /> //加密成base64<br /> String strSrc = "林";<br /> String strOut = new String(Base64.encode(strSrc.getBytes()));<br /> System.out.println(strOut);</p><p> String strOut2 = new String(Base64.decode(strOut.toCharArray()));<br /> System.out.println(strOut2);<br /> }<br />}