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); } } |