package com.mtools.core.plugin.security;
import java.io.UnsupportedEncodingException;
import java.security.SignatureException;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.log4j.Logger;
import com.mtools.core.plugin.helper.FuncUtil;
/**
* @author 张广海
* 功能:通联网关MD5签名处理核心文件,不需要修改
* 版本:1.3
* 修改日期:2014-08-03
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
* 该代码仅供学习和研究通联网关接口使用,只是提供一个
* */
public class MD5 {
private static Logger log = Logger.getLogger(MD5.class);
/**
* 签名字符串
* @param text 需要签名的字符串
* @param key 密钥
* @param input_charset 编码格式
* @return 签名结果
*/
public static String sign(String text, String key, String input_charset) {
text = text+"&key=" + key;
log.info("签名原字符串:"+FuncUtil.filteSepcStr(text));
String signed=DigestUtils.md5Hex(getContentBytes(text, input_charset));
log.info("签名后结果:"+signed);
return signed;
}
/**
* 签名字符串
* @param text 需要签名的字符串
* @param sign 签名结果
* @param key 密钥
* @param input_charset 编码格式
* @return 签名结果
*/
public static boolean verify(String text, String sign, String key, String input_charset) {
text = text+"&key=" + key;
String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));
log.info("验签名原文:"+FuncUtil.filteSepcStr(text));
log.info("验签签名信息:"+mysign);
if(mysign.equals(sign)) {
return true;
}
else {
return false;
}
}
/**
* @param content
* @param charset
* @return
* @throws SignatureException
* @throws UnsupportedEncodingException
*/
private static byte[] getContentBytes(String content, String charset) {
if (charset == null || "".equals(charset)) {
return content.getBytes();
}
try {
return content.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
}
}
public static void main(String[] args){
String content ="childmerid=000000000000006&completetime=20141021102929&errorCode=0000&merchantId=1400100029&orderAmount=77000&orderDatetime=20141021102828&orderNo=141021220190149&payAmount=77000&payResult=支付成功&payType=0&returnDatetime=201410294102929&signType=1&transnumber=9999141021000751&version=v1.0";
String content2="&payType=1&returnDatetime=201408219125024";//&signType=1&transnumber=10042&version=1.0v&key=123456
// String org="zhanggh";
String key="1q2w3e4r5t6y7u8i9o";
String input_charset="UTF-8";
// String input_charset="GBK";
String signmsg=MD5.sign(content,key, input_charset);
System.err.println(signmsg);
// boolean verfiy_result=MD5.verify(org, signmsg, key, input_charset);
// if(content.equals(content2)){
// log.error("相等");
// }else{c05aa48639e613ead6a5dfe98f9f3dd0
// log.error("不相等");
// }
// String sign = DigestUtils.md5Hex(getContentBytes(content, "utf-8"));
// System.err.println(sign);
// sign = DigestUtils.md5Hex(getContentBytes(content2, "utf-8"));
// System.err.println(sign);
}
}