Метод Java, который может обеспечить тот же вывод, что и метод Python для HMAC-SHA256 в Hex


Теперь я пытаюсь закодировать строку с помощью HMAC-SHA256 с помощью Java. Кодированная строка, необходимая для соответствия другому набору кодированных строк, генерируемых Python с помощью hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest(). Я пытался

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    sha256_HMAC.init(secretKey);

    byte[] hash = sha256_HMAC.doFinal(policy.getBytes());
    byte[] hexB = new Hex().encode(hash);
    String check = Hex.encodeHexString(hash);
    String sha256 = DigestUtils.sha256Hex(secret.getBytes());

После того, как я распечатал их, hash, hexB, check и sha256 не дали того же результата, что и следующий метод шифрования Python

hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest()

Итак, я попытался найти библиотеку или что-то, что работает аналогично вышеупомянутой функции Python. Кто-нибудь может мне помочь?

1 3

1 ответ:

Вы уверены, что ваш ключ и входные данные идентичны и правильно закодированы как на java, так и на python?

HMAC-SHA256 работает одинаково на обеих платформах.

Java

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec("1234".getBytes(), "HmacSHA256");
sha256_HMAC.init(secretKey);
byte[] hash = sha256_HMAC.doFinal("test".getBytes());
String check = Hex.encodeHexString(hash);
System.out.println(new String(check));

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f

Python

print hmac.new("1234", "test", hashlib.sha256).hexdigest();

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f