import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static String generateSign(String secretKey, Map<String, String> param) {
// Sort parameters by key
Map<String, String> sortedParam = new TreeMap<>(param);
// Concatenate key-value pairs
StringBuilder concatenatedStr = new StringBuilder();
for (Map.Entry<String, String> entry : sortedParam.entrySet()) {
if (!entry.getKey().equals("sign") && !entry.getValue().isEmpty()) {
if (concatenatedStr.length() == 0) {
concatenatedStr.append(entry.getKey()).append("=").append(entry.getValue());
} else {
concatenatedStr.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
}
}
// Append timestamp
String timestamp = String.valueOf(System.currentTimeMillis());
concatenatedStr.append(timestamp);
// Add secret key
concatenatedStr.insert(0, secretKey);
// Calculate MD5 hash
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hashBytes = md.digest(concatenatedStr.toString().getBytes());
StringBuilder sign = new StringBuilder();
for (byte b : hashBytes) {
sign.append(String.format("%02x", b));
}
return sign.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String secretKey = "YOUR_SECRET_KEY";
Map<String, String> param = new HashMap<>();
param.put("param1", "value1");
param.put("param2", "value2");
// Add more parameters as needed
String sign = generateSign(secretKey, param);
System.out.println("Generated Sign: " + sign);
}
}