Что делает Crypto JS .en c .Hex.parse (ha sh) и как воспроизвести его в Java? - PullRequest
0 голосов
/ 21 июня 2020

По сути, я хочу воспроизвести следующий код 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: отредактировано для ясности

1 Ответ

1 голос
/ 23 июня 2020

Предполагая, что ha sh -value в JS является String var, нам действительно нужен способ получить из него byte []. Простой способ

byte[] hashValue = hash.getBytes("UTF-8");

не работает, так как нам нужно значение, а не ASCII-код символов. Просто используйте метод hexStringToByteArray для преобразования шестнадцатеричного представления в массив байтов («bytesToHex» - это служебный метод для распечатки массива байтов):

Это результат:

...