Java生成POST请求签名KEY(基于HMAC-SHA384算法规则)
Java 版本签名生成实现
实现逻辑和你提供的JS版本完全对齐,注意JSON序列化输出必须和JS原生JSON.stringify完全一致,否则会导致签名校验失败。示例中使用Jackson做JSON序列化,你也可以替换为其他JSON工具,只要保证序列化结果和JS侧一致即可。
import com.fasterxml.jackson.databind.ObjectMapper; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; public class SignatureGenerator { private static final String HMAC_ALGORITHM = "HmacSHA384"; private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); public static String generate(String apiPath, long nonce, Object body, String secretKey) throws Exception { // 拼接签名字符串 String signContent = apiPath + nonce + OBJECT_MAPPER.writeValueAsString(body); // 初始化HMAC-SHA384 Mac mac = Mac.getInstance(HMAC_ALGORITHM); mac.init(new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), HMAC_ALGORITHM)); // 计算哈希并转十六进制 byte[] hash = mac.doFinal(signContent.getBytes(StandardCharsets.UTF_8)); return bytesToHex(hash); } private static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { String hex = Integer.toHexString(0xff & b); if (hex.length() == 1) sb.append('0'); sb.append(hex); } return sb.toString(); } public static void main(String[] args) throws Exception { String secretKey = ""; String apiPath = "/v3/auth/kuna_codes/issued-by-me"; long nonce = System.currentTimeMillis(); Object body = new Object(); // 替换为实际请求体对象 String signature = generate(apiPath, nonce, body, secretKey); System.out.println(signature); } }
注意事项
- 如果不想引入Jackson依赖,可以直接拼接和实际发送内容完全一致的请求体JSON字符串,替换
OBJECT_MAPPER.writeValueAsString(body)部分即可 - 确保
apiPath、nonce、请求体内容和实际发送POST请求时的参数完全一致
内容的提问来源于stack exchange,提问作者Xleb。
相关产品推荐
相关产品推荐

