签名算法(丫丫智能锁) 按ASCII码从小到大排序(字典序)+key+MD5+转大写

我就是我 2024-04-17 19:16 132阅读 0赞
  1. package Test;
  2. import java.math.BigInteger;
  3. import java.security.MessageDigest;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.util.Iterator;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import java.util.SortedMap;
  9. import java.util.TreeMap;
  10. public class 签名算法 {
  11. /**
  12. * sign 签名 (参数名按ASCII码从小到大排序(字典序)+key+MD5+转大写签名)
  13. *
  14. * @return
  15. */
  16. public static String createSign(Map params, String key) {
  17. StringBuffer sbkey = new StringBuffer();
  18. // entrySet 所有参与传参的参数按照accsii排序(升序)
  19. Set es = params.entrySet();
  20. Iterator it = es.iterator();
  21. while (it.hasNext()) {
  22. Map.Entry entry = (Map.Entry) it.next();
  23. String k = (String) entry.getKey();
  24. Object v = entry.getValue();
  25. //空值不传递,不参与签名组串
  26. if (null != v && !"".equals(v)) {
  27. sbkey.append(k + "=" + v + "&");
  28. }
  29. }
  30. sbkey = sbkey.append("SIGN=" + key);
  31. System.out.println(sbkey);
  32. //MD5加密,结果转换为大写字符
  33. String sign = encodeByMD5(sbkey.toString()).toUpperCase();
  34. return sign;
  35. }
  36. /**
  37. * 对字符串进行MD5加密
  38. *
  39. * @param str 需要加密的字符串
  40. * @return 小写MD5字符串 32位
  41. */
  42. public static String encodeByMD5(String str) {
  43. MessageDigest digest;
  44. try {
  45. digest = MessageDigest.getInstance("MD5");
  46. digest.update(str.getBytes());
  47. return new BigInteger(1, digest.digest()).toString(16);
  48. } catch (NoSuchAlgorithmException e) {
  49. e.printStackTrace();
  50. return null;
  51. }
  52. }
  53. public static void main(String[] args) {
  54. SortedMap <String, Object> params = new TreeMap <>();
  55. params.put("APPID", "AEC749FBFDA641DBAB5A8487C3A00EE1");
  56. params.put("NONCESTR", "1UUSDYYYNMLKKS");
  57. params.put("USERNAME", "13800000001");
  58. params.put("PASSWORD", "123456");
  59. params.put("PHONEID", "android");
  60. params.put("PHONEIP", "PHONEIP");
  61. params.put("sign", createSign(params, "69F559FF22D8A7F856DBF45D2097A87C"));
  62. }
  63. }

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读