import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
class Main {
public static void main(String[] args) {
try {
String secret = "eyJhdWRpZW5jZSI6MTMsImp0aSI6Imp3dDY3OGYxNWY1NzIzNTI5LjYyOTMxNjcwIiwiaWF0IjoxNzM3NDMwNTE3LCJuYmYiOjE3Mzc0MzA1MTcsImV4cGlyZSI6MTczNzQzNDExNywicGF5bG9hZCI6eyJpZCI6MTN9fQ";
Map<String, Object> data = new HashMap<>();
data.put("key", "f825ddc7d2a26de395aa14844671a075");
data.put("extend", "{\"order_sn\":\"aa2975823f72eaf5403cbe7f3796e7dd\",\"time\":0}");
data.put("timestamp", 1737431696661L);
data.put("nonce", "KoDX1uzsDr3LL2KH");
Map<String, Object> sortedData = new TreeMap<>(data);
StringBuilder queryString = new StringBuilder();
for (Map.Entry<String, Object> entry : sortedData.entrySet()) {
if (queryString.length() > 0) {
queryString.append("&");
}
queryString.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.toString()))
.append("=")
.append(URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8.toString()));
}
Mac sha256Hmac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
sha256Hmac.init(secretKey);
byte[] hash = sha256Hmac.doFinal(queryString.toString().getBytes(StandardCharsets.UTF_8));
String signature = bytesToHex(hash);
System.out.println("Generated Signature: " + signature);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String bytesToHex(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (byte b : bytes) {
result.append(String.format("%02x", b));
}
return result.toString();
}
}