工作纪实56-ES搜索串一致性
public static String genUniqueKey(String uid, String queryCond) {
String[] paramsArray = queryCond.split("&");
Map<String, String> paramsMap = new TreeMap<>();
for (String param : paramsArray) {
String[] keyValue = param.split("=");
paramsMap.put(keyValue[0], keyValue[1]);
}
// 将参数按照键名排序
StringBuilder sortedParams = new StringBuilder(uid).append("&");
for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
sortedParams.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
// 使用SHA-256生成哈希值
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(sortedParams.toString().getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}