Это java-функция, которая выполняет эту работу.
static byte[] HmacSHA384(String data, byte[] key) {
try {
mac.init(new SecretKeySpec(key, HMAC_ALGORITHM));
} catch (InvalidKeyException e) {
//throw new PWAINUnRecoverableException("Invalid key exception while mac init", e);
throw new RuntimeException("Invalid key exception while mac init", e);
}
return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
}
Я уже попробовал этот ответ безуспешно.
Используется crypto-js
модультакже как:
const result = crypto_js.HmacSHA384(key, data).toString();
console.log(result.split('').map(getBytes)); // used this to match byte array from java output. No luck!
function getBytes(x) {return x.charCodeAt(0);}
Обратите внимание, что я использую key
в качестве строки в коде JavaScript, так как crypto_js.HmacSHA384
принимает только строку, а не byte[]
. Но я сравнил byte[]
моей строки с byte[]
.
в Java-коде. Вывод из кода JS:
[97,104,69,80,106,49,121,83,100,87,120,56,76,65,101,71,54,52,81,110,104,108,72,55,54,56,112,104,56,109,72,101,68,43,83,70,73,89,54,81,71,53,49,98,48,119,115,117,72,83,112,117,99,110,107,76,113,78,105,73,76,107,120,82]
Вывод из кода Java:
[-29, 76, -16, -110, -35, -87, 18, -53, -1, -105, -77, -96, -49, -110, 102, -74, -110, 31, -87, 115, 102, -43, 101, -89, -82, -8, 96, -99, -89, 103, -128, 104, -121, -107, -98, 18, -18, 85, 97, -121, 30, 91, -42, -11, -6, -58, -7, 113]
Оба требуют одинакового ввода.
Любая помощь будет оценена. Спасибо!