Я пытаюсь воспроизвести эквивалент Python HMAC-SHA256 в Android (Java). Представление Python показано ниже с правильным выводом:
Питон
print (hmac.new(key = binascii.unhexlify("0123465789"),msg = binascii.unhexlify("ABCDEF"),digestmod=hashlib.sha256).hexdigest()).upper()
Output
5B5EE08A20DDD645A31384E51AC581A4551E9BE5AC8BF7E690A5527F2B9372CB
Однако я не могу получить тот же результат на Java, используя приведенный ниже код:
Джава
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec("0123465789".getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secretKey);
byte[] hash = sha256_HMAC.doFinal("ABCDEF".getBytes("UTF-8"));
String check = (new String(Hex.encodeHex(hash))).toUpperCase();
System.out.println(check);
Output
46F9FD56BDAE29A803BAD5BC668CB78DA4C54A51E6C031FB3BC2C42855047213
Я совершенно уверен, что моя проблема заключается в том, что я не могу закодировать Java-эквивалент Python:
key = binascii.unhexlify("0123465789")
&
msg = binascii.unhexlify("ABCDEF")
Это связано с тем, что, когда я не выполняю binascii.unhexlify для входных данных Hex-String в Python, я получаю одинаковые результаты для обоих методов. Однако для Python HMAC-SHA256 требуется операция binascii.unhexlify.
Я провел много исследований и даже попытался импортировать метод, который Python использует для выполнения binascii.unhexlify в Java, но я все еще не могу получить идентичные результаты. Любая помощь и / или совет будут более чем оценены в решении этой проблемы. Кто-нибудь может мне помочь?
"0123465789".getBytes("UTF-8")
вам, очевидно, необходимо строки hex-decode, представляющие ключ и сообщение. - person Oleg Estekhin   schedule 04.07.2014