package com.ectrip.trips.net; import java.io.UnsupportedEncodingException; import com.alibaba.fastjson.JSON; import com.ectrip.cyt.base.DataTrans; import com.ectrip.cyt.base.Request; import com.ectrip.cyt.base.Response; import com.ectrip.cyt.config.MyApp; import com.ectrip.cyt.utils.Base64; import com.ectrip.cyt.utils.LogUtil; import com.fourmob.datetimepicker.Utils; public class DataTool { public static final String TAG = "DataTool"; /** * 通过signkey和data验证数据,验证通过会返回true,未通过返回false * 不建议外部调用此方法 * @param signkey * @param data * @param signed * @return */ public static boolean checkData(String signkey,String data,String signed){ return signed.equals(getSign(signkey,data)); } /** * 通过signkey和实体验证数据, 验证通过返回该实体, 未通过返回null * 不建议外部调用此方法 * @param dataTrans * @return */ protected static DataTrans checkData(String signkey,DataTrans dataTrans){ return checkData(signkey,dataTrans.getData(),dataTrans.getSigned())==true?dataTrans:null; } /** * 通过dataTransJsonStr字符串验证数据, 验证通过返回该字符串对应的实体, 未通过返回null * 在接收到字符串时可以使用此方法, 建议验证时调用此方法 * 此方法会给request或response塞值 * @param dataTransJsonStr * @return */ public static DataTrans checkData(String signkey,String dataTransJsonStr,Class dataType){ DataTrans dataTrans=checkData(signkey,(DataTrans)JSON.parseObject(dataTransJsonStr, DataTrans.class)); if(null!=dataTrans){ if(Request.class.isAssignableFrom(dataType)){ dataTrans.request=(Request)JSON.parseObject(dataTrans.getData(), dataType); }else if(Response.class.isAssignableFrom(dataType)){ dataTrans.response=(Response)JSON.parseObject(dataTrans.getData(), dataType); } } return dataTrans; }; public static DataTrans checkData(String signkey,String dataTransJsonStr){ return checkData(signkey,(DataTrans)JSON.parseObject(dataTransJsonStr, DataTrans.class)); }; /** * 签名 * @param signkey * @param data * @return */ // public static String getSign(String signkey,String data){ // //签名: md5(分配的密匙+base64(data)) // try { // String signdata=signkey+data; // return MD5Util.signMD5(new String( // Base64.encodeBase64(signdata.getBytes("UTF-8"))), // "UTF-8"); // } catch (UnsupportedEncodingException e) { // e.printStackTrace(); // } // return ""; // } public static String getSign(String signkey,String data){ //签名: md5(分配的密匙+base64(data)) byte[] responseByte = null; try { String signData = signkey + data; String base64 = Base64.encode(signData.getBytes("UTF-8")); LogUtil.i(TAG,"responseData:" + base64); String responseSign = MD5Util.signMD5(base64,"UTF-8"); LogUtil.i(TAG,"responseSign:" + responseSign); return responseSign; } catch (UnsupportedEncodingException e) { e.printStackTrace(); LogUtil.i(TAG,"OTA Service : getErrorResponseJson : String to xml UTF-8 Error !"); }catch (Exception e){ e.printStackTrace(); } return ""; } /** * 给对象 赋 签名, 返回带有签名的完整对象, 在对象需要赋值签名并且该对象还要继续被调用时 使用此方法 * @param datain * @return */ public static DataTrans envelopeData(String signkey,DataTrans datain){ datain.setSigned(getSign(signkey,datain.getData())); return datain; } /** * 给对象 赋 签名, 返回带有签名的完整字符串, 在把对象封装成json字符串时使用此方法 * @param datain * @param signkey 标识 * @param identity 编码 * @return */ public static String envelopeData(Object requestOrResponse,String signkey,String identity){ String data = null; try { data = JSON.toJSONString(requestOrResponse); } catch (Exception e) { e.printStackTrace(); } return JSON.toJSONString(new DataTrans(data, getSign(signkey, data), identity)); } }