base64的java實現方法

來源:互聯網
上載者:User

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 />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.