SignUtil.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by FernFlower decompiler)
  4. //
  5. package com.kingdee.eas.custom.szpgm.osf.task;
  6. import java.security.MessageDigest;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class SignUtil {
  14. public static String generateSignature(Map<String, Object> params, String key) {
  15. if (params != null && !params.isEmpty()) {
  16. Map<String, String> sortedParamMap = new HashMap();
  17. for(Map.Entry<String, Object> entry : params.entrySet()) {
  18. String paramName = (String)entry.getKey();
  19. String paramValue = String.valueOf(entry.getValue());
  20. if (!"sign".equalsIgnoreCase(paramName) && paramValue != null && !paramValue.isEmpty()) {
  21. String normalizedName = lowerFirstLetter(paramName);
  22. sortedParamMap.put(normalizedName, paramValue);
  23. }
  24. }
  25. List<String> sortedKeys = new ArrayList(sortedParamMap.keySet());
  26. Collections.sort(sortedKeys);
  27. StringBuilder stringA = new StringBuilder();
  28. for(String keyName : sortedKeys) {
  29. if (stringA.length() > 0) {
  30. stringA.append("&");
  31. }
  32. stringA.append(keyName).append("=").append((String)sortedParamMap.get(keyName));
  33. }
  34. String stringSignTemp = stringA.toString() + "&key=" + key;
  35. return md5Hex(stringSignTemp).toUpperCase();
  36. } else {
  37. return "";
  38. }
  39. }
  40. public static boolean verifySignature(Map<String, Object> params, String key, String sign) {
  41. if (params != null && sign != null) {
  42. String expectedSign = generateSignature(params, key);
  43. return expectedSign.equals(sign);
  44. } else {
  45. return false;
  46. }
  47. }
  48. private static String lowerFirstLetter(String name) {
  49. if (name != null && !name.isEmpty()) {
  50. char firstChar = name.charAt(0);
  51. if (Character.isUpperCase(firstChar)) {
  52. char[] chars = name.toCharArray();
  53. chars[0] = Character.toLowerCase(firstChar);
  54. return new String(chars);
  55. } else {
  56. return name;
  57. }
  58. } else {
  59. return name;
  60. }
  61. }
  62. private static String md5Hex(String input) {
  63. try {
  64. MessageDigest md = MessageDigest.getInstance("MD5");
  65. byte[] digest = md.digest(input.getBytes());
  66. StringBuilder sb = new StringBuilder();
  67. for(byte b : digest) {
  68. sb.append(String.format("%02x", b));
  69. }
  70. return sb.toString();
  71. } catch (NoSuchAlgorithmException e) {
  72. throw new RuntimeException("MD5 算法不支持", e);
  73. }
  74. }
  75. // public static void main(String[] args) {
  76. // String key = "C4C82EB86F63FE9CB2B71BA05DE06449";
  77. // Map<String, Object> params = new HashMap();
  78. // params.put("pageIndex", 1);
  79. // params.put("recordStartDate", "2026-05-27 00:00:00");
  80. // params.put("recordEndDate", "2026-05-27 23:59:59");
  81. // params.put("pageSize", 100);
  82. // params.put("timestamp", System.currentTimeMillis() / 1000L);
  83. // params.put("sign", "ORD123456");
  84. // params.put("empNo", "120176");
  85. // String sign = generateSignature(params, key);
  86. // System.out.println("生成的签名: " + sign);
  87. // System.out.println("生成的签名timestamp: " + System.currentTimeMillis() / 1000L);
  88. // params.put("sign", sign);
  89. // boolean valid = verifySignature(params, key, sign);
  90. // System.out.println("签名校验结果: " + valid);
  91. // System.out.println("签名校验结果: ");
  92. // }
  93. }