All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.xiaoyuge5201.weixin.Md5Sign Maven / Gradle / Ivy

There is a newer version: 1.3.5
Show newest version
package com.github.xiaoyuge5201.weixin;

import org.apache.commons.lang3.StringUtils;

import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

/**
 * @author xiaoyuge
 */
public class Md5Sign {

	private static final String[] HEXDIGITS = { "0", "1", "2", "3", "4", "5",
		"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0) {
			n += 256;
		}
		int d1 = n / 16;
		int d2 = n % 16;
		return HEXDIGITS[d1] + HEXDIGITS[d2];
	}

	/**
	 * 字节数组转字符串
	 *
	 * @param b 数组
	 * @return 字符串
	 */
	private static String byteArrayToHexString(byte[] b) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++) {
			resultSb.append(byteToHexString(b[i]));
		}
		return resultSb.toString();
	}

	/**
	 * @param origin 原文
	 * @param charsetName 编码格式
	 * @return 加密后的字符串
	 */
	public static String MD5Encode(String origin, String charsetName) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (StringUtils.isNotBlank(charsetName)) {
				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
			}
			else {
				resultString = byteArrayToHexString(md.digest(resultString
						.getBytes(charsetName)));
			}
		} catch (Exception exception) {
		}
		return resultString;
	}
	/**
	 * MD5
	 * 微信支付签名算法sign
	 * @param characterEncoding 编码格式
	 * @param parameters 参数
	 * @return 签名结果
	 */
	@SuppressWarnings("rawtypes")
	public static String createSign(String characterEncoding, SortedMap parameters , String key){
		StringBuffer sb = new StringBuffer();
		Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
		Iterator it = es.iterator();
		while(it.hasNext()) {
			Map.Entry entry = (Map.Entry)it.next();
			String k = (String)entry.getKey();
			Object v = entry.getValue();
			if(null != v && !"".equals(v) 
					&& !"sign".equals(k) && !"key".equals(k)) {
				sb.append(k + "=" + v + "&");
			}
		}
		sb.append("key=").append(key);
		return MD5Encode(sb.toString(), characterEncoding).toUpperCase();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy