Escape加解密Java版

来源:互联网 发布:紧急通知网页域名升级 编辑:程序博客网 时间:2024/05/16 00:46
/** * 中文加密 * Created by geo on 2017/7/4. */public class EscapeUtils {    /**     * Escape编码     * @param src 待加盐字符串     * @return 加盐字符串     */    public static String escape(String src) {        int i;        char j;        StringBuffer tmp = new StringBuffer();        tmp.ensureCapacity(src.length() * 6);        for (i = 0; i < src.length(); i++) {            j = src.charAt(i);            if (Character.isDigit(j) || Character.isLowerCase(j)                    || Character.isUpperCase(j))                tmp.append(j);            else if (j < 256) {                tmp.append("%");                if (j < 16)                    tmp.append("0");                tmp.append(Integer.toString(j, 16));            } else {                tmp.append("%u");                tmp.append(Integer.toString(j, 16));            }        }        return tmp.toString();    }    /**     * Escape解码     * @param src 加盐字符串     * @return 明文     */    public static String unescape(String src) {        StringBuffer tmp = new StringBuffer();        tmp.ensureCapacity(src.length());        int lastPos = 0, pos = 0;        char ch;        while (lastPos < src.length()) {            pos = src.indexOf("%", lastPos);            if (pos == lastPos) {                if (src.charAt(pos + 1) == 'u') {                    ch = (char) Integer.parseInt(src                            .substring(pos + 2, pos + 6), 16);                    tmp.append(ch);                    lastPos = pos + 6;                } else {                    ch = (char) Integer.parseInt(src                            .substring(pos + 1, pos + 3), 16);                    tmp.append(ch);                    lastPos = pos + 3;                }            } else {                if (pos == -1) {                    tmp.append(src.substring(lastPos));                    lastPos = src.length();                } else {                    tmp.append(src.substring(lastPos, pos));                    lastPos = pos;                }            }        }        return tmp.toString();    }}