通过移动位置而加密

package com.gdad.ec.util;

/**
 * 通过移动位置而加密
 * @author mr he
 *
 */
public class Escape {

	    private final static String[] hex = { "00", "01", "02", "03", "04", "05",
	        "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10",
	        "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B",
	        "1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26",
	        "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31",
	        "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C",
	        "3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47",
	        "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52",
	        "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D",
	        "5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68",
	        "69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73",
	        "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E",
	        "7F", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
	        "8A", "8B", "8C", "8D", "8E", "8F", "90", "91", "92", "93", "94",
	        "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F",
	        "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA",
	        "AB", "AC", "AD", "AE", "AF", "B0", "B1", "B2", "B3", "B4", "B5",
	        "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "C0",
	        "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB",
	        "CC", "CD", "CE", "CF", "D0", "D1", "D2", "D3", "D4", "D5", "D6",
	        "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "E0", "E1",
	        "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC",
	        "ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7",
	        "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" };

	        private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,
	        0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
	        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };

	        /**
	         * Unicode 格式 编码
	         *
	         * @param s
	         * @return
	         */
	        public static String escape(String s) {
	        StringBuffer sbuf = new StringBuffer();
	        int len = s.length();
	        for (int i = 0; i < len; i++) { 
	        int ch = s.charAt(i);
	        if ('A' <= ch && ch <= 'Z') {
	        sbuf.append((char) ch);
	        } else if ('a' <= ch && ch <= 'z') {
	        sbuf.append((char) ch);
	        } else if ('0' <= ch && ch <= '9') {
	        sbuf.append((char) ch);
	        } else if (ch == '-' || ch == '_'
	        || ch == '.' || ch == '!' || ch == '~' || ch == '*'
	        || ch == '\'' || ch == '(' || ch == ')') {
	        sbuf.append((char) ch);
	        } else if (ch <= 0x007F) {
	        sbuf.append('%');
	        sbuf.append(hex[ch]);
	        } else {
	        sbuf.append('%');
	        sbuf.append('u');
	        sbuf.append(hex[(ch >>> 8)]);
	        sbuf.append(hex[(0x00FF & ch)]);
	        }
	        }
	        return sbuf.toString();
	        }

	        /**
	         * 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
	         *
	         * @param s
	         * @return
	         */
	        public static String unescape(String s) {
	        StringBuffer sbuf = new StringBuffer();
	        int i = 0;
	        int len = s.length();
	        while (i < len) {
	        int ch = s.charAt(i);
	        if ('A' <= ch && ch <= 'Z') {
	        sbuf.append((char) ch);
	        } else if ('a' <= ch && ch <= 'z') {
	        sbuf.append((char) ch);
	        } else if ('0' <= ch && ch<= '9') {
	    sbuf.append((char) ch);
	        } else if (ch == '-' || ch == '_'|| ch == '.' || ch == '!' || ch == '~' || ch == '*'|| ch == '\'' || ch == '(' || ch == ')') {
	        sbuf.append((char) ch);
	        } else if (ch == '%') {
	        int cint = 0;
	        if ('u' != s.charAt(i + 1)) {
	        cint = (cint << 4) | val[s.charAt(i + 1)];
	        cint = (cint << 4) | val[s.charAt(i + 2)];
	        i += 2;
	        } else {
	        cint = (cint << 4) | val[s.charAt(i + 2)];
	        cint = (cint << 4) | val[s.charAt(i + 3)];
	        cint = (cint << 4) | val[s.charAt(i + 4)];
	        cint = (cint << 4) | val[s.charAt(i + 5)];
	        i += 5;
	        }
	        sbuf.append((char) cint);
	        } else {
	        sbuf.append((char) ch);
	        }
	        i++;
	        }
	        return sbuf.toString();
	        }
	        /**
	         * 把unicode编码转换成正常字符
	         *
	         * @param hex
	         * @return
	         */
	        public static String binaryToUnicode(String hex) {
	         String strContent = "";
	         try {
	             int i;
	             int n;
	             int j;
	             n = hex.length() / 4;
	             j = 0;
	             char[] content = new char[n];
	             for (i = 0; i < n; i++) {
	          j = i * 4;
	          content[i] = (char) Integer.parseInt(hex.substring(j, j + 4),
	           16);
	             }
	             strContent = new String(content);
	         } catch (Exception ex) {
	             ex.printStackTrace();
	             strContent = "";
	         }
	         
	         return strContent;
	            }
	        
	        /**
	         * 把字符转换成unicode编码
	         *
	         * @param content
	         * @return
	         */
	        public static  String unicodeToBinary(String content) {
	            String hexStr = "";

	            try {
	                char[] contentBuffer = content.toCharArray();
	                String s;
	                int n;

	                for (int i = 0; i < content.length(); i++) {
	                    n = (int) contentBuffer[i];
	                    s = Integer.toHexString(n);

	                    if (s.length() > 4) {
	                        s = s.substring(0, 4);
	                    } else {
	                        s = "0000".substring(0, 4 - s.length()) + s;
	                    }

	                    hexStr = hexStr + s;
	                }
	            } catch (Exception ex) {
	                hexStr = "";
	            }

	            return hexStr.toUpperCase();
	        }

	        public static void main(String[] args) {
//	        String stest = "\"asd请选择";
//	        System.out.println(escape(stest));
//	        System.out.println(unescape(escape(stest))+"||"+unescape(stest));
//	        System.out.println("0----9:"+(int)'0'+"--------"+(int)'9');
//	        System.out.println("A----Z:"+(int)'A'+"--------"+(int)'Z');
//	        System.out.println("a----z:"+(int)'a'+"--------"+(int)'z');
//	        System.out.println("-:"+(int)'-'+"||" +(int)'_'+"||"+(int)'.'
//	          +"||" +(int)'!'+"||"
//	          +(int)'~'+"||"+(int)'*'+"||"+(int)'\''+"||" 
//	          +(int)'('+"||"+(int)')'+"||");
//	         for (int i = 0; i < 128; i++) {
//	          if (i%10==0) {
//	     System.out.print("  "+i+"="+(char)i+"\n");
//	    }else{
//	     System.out.print("  "+i+"="+(char)i);
//	    }
	// //         char ch = (char)i;
	// //         if (ch == '-' || ch == '_'|| ch == '.' || ch == '!' || ch == '~' || ch == '*'|| ch == '\'' || ch == '(' || ch == ')') {
	// //    System.out.println(ch+"="+(int)ch+"  ");
	// //   }
//	         }unescape(String s)
	        	System.out.println("Escape.main()"+"1e56317170064543".length());
//	        	for (int i = 0; i < 11111; i++) {
//	        		String st=Escape.unicodeToBinary("2"+i);
//	   	         System.out.println(st+"\t"+st.length());		
//				}
	        	String st=Escape.unicodeToBinary("2");
	         System.out.println(Escape.binaryToUnicode(st));
	         String asd=Escape.escape("S00001");
	         System.out.println("Escape.main()"+asd);
	         System.out.println("Escape.main()"+Escape.unescape(asd));
//	         System.out.println(Escape.unescape("%u6492%u8303%u5FB7%u8428%u9426"));
//	         System.out.println(Escape.unescape("撒33范德萨"));
	        }
	        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值