浏览 1808 次
锁定老帖子 主题:Base64编码还原String的实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-21
最后修改:2009-05-21
代码有些地方可能还需要完善。 public class Base64Test { private final static String CODE_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; private final static int ORGINAL_LEN = 8; private final static int NEW_LEN = 6; public static void main(String[] args) throws Exception{ String str = "uf6joUAjo6Qloa2hrSYqo6ijqKOpo6mhqqGqo6mhqqGq"; System.out.println(decodeBase64(str)); } public static String decodeBase64(String encodeStr) throws Exception{ StringBuilder sb = new StringBuilder(""); for (int i = 0; i < encodeStr.length(); i++){ char c = encodeStr.charAt(i); //把"1tC5sg=="字符串一个个分拆 int k = CODE_STR.indexOf(c); //分拆后的字符在CODE_STR中的位置,从0开始,如果是'=',返回-1 if(k != -1){ //如果该字符不是'=' String tmpStr = Integer.toBinaryString(k); int n = 0; while(tmpStr.length() + n < NEW_LEN){ n ++; sb.append("0"); } sb.append(tmpStr); } } /** * 8个字节分拆一次,得到总的字符数 * 余数是加密的时候补的,舍去 */ int newByteLen = sb.length() / ORGINAL_LEN; /** * 二进制转成字节数组 */ byte[] b = new byte[newByteLen]; for(int j = 0; j < newByteLen; j++){ b[j] = (byte)Integer.parseInt(sb.substring(j * ORGINAL_LEN, (j+1) * ORGINAL_LEN),2); } /** * 字节数组还原成String */ return new String(b, "gb2312"); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |