编辑代码

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");

            // Sort the map by key
            Map<String, Object> sortedData = new TreeMap<>(data);

            // Create the query string
            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()));
            }

            // Generate the signature
            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();
    }
}