DataTool.java 3.92 KB
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
	 * @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));
	}
}