app接口qing请求工具类

package com.sf.base.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSON;


/**
* app接口工具类
* 
*  
*
*/
public class AppInterFaceUtil {

/**
* 获取request 传的参数
* 
* @param request
* @param method
* post/get
* @return
* @throws IOException
*/
public static String getInputStreamParameter(HttpServletRequest request) throws IOException {
String data = "";
String method = request.getMethod();
if ("POST".equals(method)) {
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
}
data = sb.toString();
} else if ("GET".equals(method)) {
data = request.getParameter("data");
}

if(request.getRequestURI().endsWith("AES")){
//需要加密
data = AESUtil.decrypt(data);
}
if (StringUtils.isBlank(data)) {
Map<String, String[]> mapdata = request.getParameterMap();
if (null != mapdata) {
HashMap<String, Object> dest = new HashMap<String, Object>(mapdata.size());
for (Map.Entry<String, String[]> entry : mapdata.entrySet()) {
if (entry.getValue() != null) {
if (entry.getValue().length == 1) {
dest.put(entry.getKey(), entry.getValue()[0]);
} else {
dest.put(entry.getKey(), entry.getValue());
}
}
}
data = JSON.toJSONString(dest);
}
}
return data;
}

/**
* 设置response
* 
* @param request
* @param response
* @throws UnsupportedEncodingException
*/
public static void setCharacterEncoding(HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
}

/**
* 获取请求的ip
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {// 比较时忽略大小写
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
public static void main(String [] args){

}
}
@RequestMapping(value = "/searchContact", method = RequestMethod.POST)
	@ResponseBody
	public void searchContact(HttpServletRequest request, HttpServletResponse response) {
		

			String jsonParam = AppInterFaceUtil.getInputStreamParameter(request);
			//jsonParam = AESUtil.decrypt(jsonParam);
			User user = null;
			 
		 
			user = JSON.parseObject(jsonParam, User.class);
}

  

package com.sf.base.util;

import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * 
 * @author qmh
 *
 */
public class AESUtil {
    
    //128
    private static final byte[] ecsKey = new byte[] { (byte) 0xDA, (byte) 0x9B,
            (byte) 0x59, (byte) 0x34, (byte) 0x43, (byte) 0x7B, (byte) 0x42,
            (byte) 0xDE, (byte) 0x9E, (byte) 0x50, (byte) 0xDB, (byte) 0xFE,
            (byte) 0x08, (byte) 0x6A, (byte) 0x75, (byte) 0x9D, };
    
    //256
    /*private static final byte[] ecsKey = new byte[] {
        (byte)0xDA, (byte)0x9B, (byte)0x59, (byte)0x34, (byte)0x43, (byte)0x7B, (byte)0x42, (byte)0xDE,
        (byte)0x9E, (byte)0x50, (byte)0xDB, (byte)0xFE, (byte)0x08, (byte)0x6A, (byte)0x75, (byte)0x9D,
        (byte)0x04, (byte)0xDA, (byte)0x80, (byte)0x53, (byte)0x8D, (byte)0xE7, (byte)0x45, (byte)0x74,
        (byte)0x85, (byte)0xB7, (byte)0xF2, (byte)0xD4, (byte)0xEB, (byte)0x65, (byte)0xC5, (byte)0x93,};
    */
    private static final byte[] ecsIv = new byte[] { (byte) 0x8C, 0x56, 0x3B,
            (byte) 0xA6, 0x6E, 0x0D, 0x40, 0x65, (byte) 0x9A, 0x7D, 0x7D, 0x03,
            0x23, 0x3B, 0x10, 0x6D };

    private static boolean flag = true;
    
    /**
     * 加密,使用指定数据源生成密钥,使用用户数据作为算法参数进行AES加密
     * 
     * @param msg
     *            加密的数据
     * @return
     */
    public static String encrypt(String msg) {
        if(flag){
            String str = "";
            try {
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                SecretKeySpec keySpec = new SecretKeySpec(ecsKey, "AES");
                IvParameterSpec ivSpec = new IvParameterSpec(ecsIv);
                // Encrypting
                cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
                byte[] input = msg.getBytes("utf-8");
                // 加密并转换成16进制字符串
                byte[] encBody = cipher.doFinal(input);
                
                str = bytesToHexString(encBody);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (InvalidAlgorithmParameterException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            }
            return str;
        }else{
            return msg;
        }
    }

    /**
     * 解密,对生成的16进制的字符串进行解密
     * 
     * @param value
     *            解密的数据
     * @return
     */
    public static String decrypt(String value) {
        if(flag){
            try {
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                SecretKeySpec keySpec = new SecretKeySpec(ecsKey, "AES");
                IvParameterSpec ivSpec = new IvParameterSpec(ecsIv);
                cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
                byte[] decBody = cipher.doFinal(asBin(value));
                return new String(decBody,"utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (InvalidAlgorithmParameterException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            }
            return "";
        }else{
            return value;
        }
    }

    /**
     * byte数组转换成16进制字符串
     * 
     * @param src
     * @return
     */
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv.toUpperCase());
        }
        return stringBuilder.toString();
    }

    /**
     * 将16进制字符串转换成字节数组
     * 
     * @param src
     * @return
     */
    private static byte[] asBin(String src) {
        if (src.length() < 1)
            return null;
        byte[] encrypted = new byte[src.length() / 2];
        for (int i = 0; i < src.length() / 2; i++) {
            int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);// 取高位字节
            int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);// 取低位字节
            encrypted[i] = (byte) (high * 16 + low);
        }
        return encrypted;
    }
    
    public static void main(String args[]){
        //String ss = "{\"body\":{\"contactInfo\":{\"account\":\"745056\",\"birthday\":\"1988-07-06\",\"deptId\":64965,\"deptName\":\"顺丰科技IT数据中心基础平台管理部\",\"email\":\"lianghuoqiu@sf-express.com\",\"gender\":1,\"imgUrl\":\"\",\"isDeleted\":0,\"mobile\":\"15986661975\",\"name\":\"梁伙球\",\"pinyin\":\"lianghuoqiu\",\"post\":\"系统初级工程师Ⅱ\",\"py\":\"lhq\",\"revision\":0,\"signature\":\"\",\"telephone\":\"0755-36391087\",\"token\":\"975bd81671ec4517b0cdefa50387d6b9\",\"userId\":270966},\"friendApplyNotify\":[{\"account\":\"816798\",\"imgUrl\":\"\",\"msg\":{\"content\":\"你好,我是邱平邀请你为好友\",\"serverTime\":1432720964334},\"name\":\"邱平\",\"userId\":410605},{\"account\":\"757347\",\"imgUrl\":\"http://sf.nos.netease.im/sfonline/8324d477-5b30-451d-a50f-fde4d068f81c\",\"msg\":{\"content\":\"你好,我是谢仁财邀请你为好友\",\"serverTime\":1433920587448},\"name\":\"谢仁财\",\"userId\":306032},{\"account\":\"491572\",\"imgUrl\":\"\",\"msg\":{\"content\":\"你好,我是彭中强邀请你为好友\",\"serverTime\":1435055245296},\"name\":\"彭中强\",\"userId\":314627},{\"account\":\"644059\",\"imgUrl\":\"\",\"msg\":{\"content\":\"你好,我是江红邀请你为好友\",\"serverTime\":1438660130080},\"name\":\"江红\",\"userId\":231304}],\"permissions\":[{\"name\":\"text_msg\",\"switchType\":1},{\"name\":\"send_picture\",\"switchType\":1},{\"name\":\"voice_chat\",\"switchType\":1},{\"name\":\"video_chat\",\"switchType\":1},{\"name\":\"send_file\",\"switchType\":0},{\"name\":\"pc_remote_assistance\",\"switchType\":1},{\"name\":\"notice_send\",\"switchType\":1},{\"name\":\"pc_network_access\",\"switchType\":1},{\"name\":\"yixin_docking\",\"switchType\":1},{\"name\":\"circle_of_friends\",\"switchType\":1},{\"name\":\"picture\",\"switchType\":1},{\"name\":\"photo_and_shooting\",\"switchType\":1},{\"name\":\"group_operate\",\"switchType\":0}]},\"msgCode\":200,\"msgString\":\"SUCCESS\",\"serverTime\":1440004472707}";
        //System.out.println(encrypt(ss));


        String s = "CB1F0BD86E318FAA54885E732F5EDB18CC4E0387021D3E87F3E445A610E30D1953DB247D8D64E17AA138D8723EE8FCFDDD44CAA5D8C4A1B5077DDAC01570941F831862266920D4A5BF6EBB63446851F4BF26E4323B92EFE60B60661E4C28184A";//"AF261F930FEFA72E326213C1C81B44A40A5BB8FC140493222C491FED67284A1EA238E59A88DD564BC1C5FE19C1B05C1F886B9315A25E6C102AA9BB7289A1519AA22304186F90554B42C36245AB7D68F5E22CD1E8E0674C7B6BAB23ECFD0017EA19DB0294DACD3597A550FA1CBB7BED145BC90CCD65CD78033E39D2DE958F097A8E369FC29D29C344D3F34A6FD7033C2926AF8D73AFB9551FF435B2D1B3DB2568EA47255AED6893A3637654084B0B1A49C222F1578B43ECFE29DA4D02012221AFC396D043E4F82C5D25AB1E733D60154D359FC74412AF4D6B276C1F24F07D7F0470A6E49160593D960595ECF50C86A46C1C53238F33A7844A77E825CDB64D5615FE83CFC917031507A71875FDB01E615327873129EAF89B0BF6968FE58D40D9176055F966A12A5B3786ED8AA0A406A18FC7405CFDD4E0765A97F01A77CCB10455CBB9D46A88265A9F65A342D7E916AFB4DA829D8C4D136390A38FC401A831CF0F4997A710EF3B6CCC00C596A221BB98E7EDD66C91A07274F4062FBA9F356068106AA31B1C9211F37C34D4DD97B41C8C35CDC67D111EF22198E757F73EFB31AD190D038640BBA6215DFCB775ACDDC50E60ADAB6737905A0F3CD79390C60D5DD7D2BF0E797E64AABF0F0D592C9C882C63EB5998CA6016C8B0071358F2D5149838C3B4A877BABC531D5BC8BBFD98BE644F8FB8E09E379DFF64113F8125355A16D77B50CD714FB52ACA3A504039688A4D66FB5734A59A31326A224D2F2EB3903F70E0340F6D4FCA7C8BB54CAA97C18B495566794B875EE4CD2BAAEAEEBF234710C4E01B543EFD8ECEB66C6FEBBDA79D6D60B1A4CDD1675503AB0C90A7AC06E99CD1208F5DF0743578A01FDDDAEA8BB4B4C53AC472816D7AC6890DD2F71B0E9B6375D87E7196C5FA82ABE847D65DB11E61CB7E390926AB83E236B5F76F803D16F933DD36C0FAFCBC6361E99D01435C8D163D0251FAB25FAD0F4647D6C1EA97D3219091634AA1828F5039976D8BBFAD573C8FBC6C8EA6FBE3325DC8EFF713FDF129413219AE25BB96504A706C232298D15CEA3D3126FFF0A590BFA89E1D3EADF2548A72DB1AE800050FBB99EBFB0C530AB1EFFEDBE0A325F99EEF701CF2C8B0E96861B68B0EA4BCCED4F23541D2CE3350151B59E3EF4D1B50CBD71984DFCB51E30F8710BA9C29577528F3E205737073964089AA865DAD55BFC1533630C145A203E210E517FF17185E19A7186A0F37E7D049D40E4973BED35810A819FD6AF26787DBDE7FAA40380D8D29768ADD7383779EC8E91A2DE1D7EBD919D24E2BA36C25CDB495DD";

        System.out.println(decrypt(s));
    }
}

 

posted on 2017-01-13 16:33  左侧码工  阅读(1234)  评论(0)    收藏  举报