Necesito enviar una solicitud POST a api.example.com . Necesito generar una CLAVE de canto para enviar una solicitud POST. La CLAVE debe ser generada por la siguiente fórmula
HEX (HMAC-SHA384({apiPath} + {nonce} + JSON({body}),{secretKey}))Encontré una muestra de código Javascript sobre cómo generar una clave de firma
javascript const crypto = require('crypto'); const publicKey = ''; const secretKey = ''; const apiPath = '/v3/auth/kuna_codes/issued-by-me'; const nonce = new Date().getTime(); const body = {}; const signatureString = `${apiPath}${nonce}${JSON.stringify(body)}`; const signature = crypto .createHmac('sha384', secretKey) .update(signatureString) .digest('hex'); console.log(signature);Necesito un código Java que genere una clave de firma mediante la fórmula proporcionada anteriormente
Algo como esto
package com.vorontsov.tbe.main; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.HexFormat; public class KunaSignatureGenerator { private static final String ALGORITHM = "HmacSHA384"; private static final String API_PATH = "/v3/auth/kuna_codes/issued-by-me"; private static final String SECRET_KEY = "secret"; public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, JsonProcessingException { var signature = new KunaSignatureGenerator().generateSignature(new RequestParams("stringVal")); System.out.println(signature); } private String generateSignature(RequestParams requestParams) throws NoSuchAlgorithmException, InvalidKeyException, JsonProcessingException { var nonce = "" + System.currentTimeMillis(); var body = new ObjectMapper().writeValueAsString(requestParams); final String signatureString = API_PATH + nonce + body; SecretKeySpec signingKey = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM); final Mac mac = Mac.getInstance(ALGORITHM); mac.init(signingKey); return HexFormat.of().formatHex(mac.doFinal(signatureString.getBytes())); } private static record RequestParams(@JsonProperty("stringParam") String stringParams) { } }