По сути, я хочу воспроизвести следующий код javascript в java:
let h = calculateHmac(CryptoJS.enc.Hex.parse(hash), key);
const calculateHmac = (seed, salt) => {
const hmac = CryptoJS.HmacSHA256(seed, salt);
return hmac;
}
Вот мой код Java:
public static String encode(String key, String hash) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
return bytesToHex(sha256_HMAC.doFinal(hash.getBytes("UTF-8")));
}
Мой java код правильно получает hma c, но мой результат отличается от js из-за части CryptoJS.enc.Hex.parse(hash)
(я использую только hash
в java). Что на самом деле делает CryptoJS.enc.Hex.parse(hash)
? Когда я его распечатываю, кажется, что он печатается так же, как hash
. И как мне воспроизвести эту строку в java?
Для справки я использую ключ 0000000000000000004d6ec16dafe9d8370958664c1dc422f452892264c59526
и ha sh 71b12b1ee6aad3763a3f844bec2512e6985f727de60224237552df77aa2d1d12
. Когда я запускаю его через онлайн-инструмент генератора hma c (например, https://www.freeformatter.com/hmac-generator.html#ad -output ), я получаю 2d1044151d96fadd070261880e6564f7a52a33af293b57cc40fb75e099d1e232
в качестве вывода, что правильно делает мой код java, но отличается от код js из-за строки CryptoJS.enc.Hex.parse(hash)
. Пожалуйста, дайте мне знать, что мне не хватает.
EDIT: отредактировано для ясности