package Test;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
public class 签名算法 {
/**
* sign 签名 (参数名按ASCII码从小到大排序(字典序)+key+MD5+转大写签名)
*
* @return
*/
public static String createSign(Map params, String key) {
StringBuffer sbkey = new StringBuffer();
// entrySet 所有参与传参的参数按照accsii排序(升序)
Set es = params.entrySet();
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)) {
sbkey.append(k + "=" + v + "&");
}
}
sbkey = sbkey.append("SIGN=" + key);
System.out.println(sbkey);
//MD5加密,结果转换为大写字符
String sign = encodeByMD5(sbkey.toString()).toUpperCase();
return sign;
}
/**
* 对字符串进行MD5加密
*
* @param str 需要加密的字符串
* @return 小写MD5字符串 32位
*/
public static String encodeByMD5(String str) {
MessageDigest digest;
try {
digest = MessageDigest.getInstance("MD5");
digest.update(str.getBytes());
return new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
SortedMap <String, Object> params = new TreeMap <>();
params.put("APPID", "AEC749FBFDA641DBAB5A8487C3A00EE1");
params.put("NONCESTR", "1UUSDYYYNMLKKS");
params.put("USERNAME", "13800000001");
params.put("PASSWORD", "123456");
params.put("PHONEID", "android");
params.put("PHONEIP", "PHONEIP");
params.put("sign", createSign(params, "69F559FF22D8A7F856DBF45D2097A87C"));
}
}
还没有评论,来说两句吧...