Estoy tratando de escribir el código Java para producir un resultado similar al de la siguiente secuencia de comandos Java para result1...
var dataToSign = "message"; var secret = "secret"; var orgId = "abcd"; var secureKey = "tZvFPMrVkgQ5m5jj"; var result1 = orgId+ CryptoJS.HmacSHA256(dataToSign, secret); console.log( result1)el valor de result1 es: abcd8b5f48702995c1598c573db1e21866a9b825d4a794d169d7060a03605796360b
Ahora quiero generar el mismo resultado usando el código Java.
String orgId = "abcd"; String key="secret"; String dataToSign = "message"; Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256"); sha256_HMAC.init(secret_key); String result2=orgId+java.util.Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8"))); System.out.println(result2);Estoy obteniendo el valor de result2 es: abcd[B@39538f9e i19IcCmVwVmMVz2x4hhmqbgl1KeU0WnXBgoDYFeWNgs=
pero quiero resultado2 similar a resultado1;
Solución 1: Deberías esta línea
String result2=orgId+java.util.Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8")));A
String result2 = orgId + getHex(sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8")));Función getHex como se muestra a continuación
static final String HEXES = "0123456789ABCDEF"; public static String getHex(byte[] raw) { if (raw == null) { return null; } final StringBuilder hex = new StringBuilder(2 * raw.length); for (final byte b : raw) { hex.append(HEXES.charAt((b & 0xF0) >> 4)) .append(HEXES.charAt((b & 0x0F))); } return hex.toString(); }Solución 2: Deberías esta línea
var result1 = orgId+ CryptoJS.HmacSHA256(dataToSign, secret);A
var result1 = orgId+ CryptoJS.HmacSHA256(dataToSign, secret); var result2 = CryptoJS.enc.Base64.stringify(result1)