package com.zx.com.cn.dao;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
/**
* 签名
* 使用appSecret+data数据+appSecret进行MD5+base64签名,然后对签名结果转大写,最后对转化后的签名数据使用utf-8 字符集urlEncoding。
* 要发送的XML内容为 test,appSecret为 12345678,则data_digest 生成过程如下:
1.先对12345678test12345678这个串先进行MD5加密,得到:a6fa71c02a94a7627d895057a1ec8655
2.然后base64签名,得到:YTZmYTcxYzAyYTk0YTc2MjdkODk1MDU3YTFlYzg2NTU=
3.签名结果转大写得到:YTZMYTCXYZAYYTK0YTC2MJDKODK1MDU3YTFLYZG2NTU=,对转换后的签名结果使用utf-8 urlEncoding 得到最终签名据:YTZMYTCXYZAYYTK0YTC2MJDKODK1MDU3YTFLYZG2NTU%3D
* @author admin
*
*/
public class MD5Base64Util {
//使用utf-8字符集
protected static String ENCODE = "UTF-8";
/**
* 生成签名sign-1
* @param bizData data数据
* @param appSecret 固定字符串 例如:12345678
* @return
*/
public String makeSign_one(String bizData, String appSecret) {
//签名格式:appSecret+data数据+appSecret
String data = appSecret + bizData + appSecret;
System.out.println("要加密在数据:"+data);
String sign="";
try {
String md5str = DigestUtils.md5Hex(data);
System.out.println("MD5加密后的字符串为:" + md5str);
String md_base64 = Base64.encodeBase64String(md5str.getBytes());
System.out.println("base64后在数据:"+md_base64);
//将base64字符串转大写
String strUp = md_base64.toUpperCase();
System.out.println("字符串转大写:"+strUp);
//以UTF-8的编码生成字符串
sign = URLEncoder.encode(new String(strUp.getBytes(), ENCODE), ENCODE);
System.out.println("最终的数据:"+sign);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return sign;
}
/**
* 生成签名sign-2
* @param bizData data数据
* @return
*/
public String makeSign_Two(String bizData) {
String appSecret="12345678";
//签名格式:appSecret+data数据+appSecret
String data = appSecret + bizData + appSecret;
System.out.println("要加密在数据:"+data);
String sign="";
try {
String md5str = DigestUtils.md5Hex(data);
System.out.println("MD5加密后的字符串为:" + md5str);
String md_base64 = Base64.encodeBase64String(md5str.getBytes());
System.out.println("base64后在数据:"+md_base64);
//将base64字符串转大写
String strUp = md_base64.toUpperCase();
System.out.println("字符串转大写:"+strUp);
//以UTF-8的编码生成字符串
sign = URLEncoder.encode(new String(strUp.getBytes(), ENCODE), ENCODE);
System.out.println("最终的数据:"+sign);
} catch ( UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
return sign;
}
//主入口
public static void main(String[] args) {
MD5Base64Util mD5Base64 =new MD5Base64Util();
String sign = mD5Base64.makeSign_one("test", "12345678");
System.out.println(sign);
}
}