Android (Java)方法相当于Python的HMAC-SHA256的十六进制



我试图在Android (Java)中复制Python HMAC-SHA256等效。Python表示如下所示,并给出了正确的输出:

Python

print (hmac.new(key = binascii.unhexlify("0123465789"),msg = binascii.unhexlify("ABCDEF"),digestmod=hashlib.sha256).hexdigest()).upper()
Output
5B5EE08A20DDD645A31384E51AC581A4551E9BE5AC8BF7E690A5527F2B9372CB

但是,我无法使用下面的代码在Java中获得相同的输出:

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

我相当肯定,我的问题是未能编写与Python相当的Java代码:

key = binascii.unhexlify("0123465789")

msg = binascii.unhexlify("ABCDEF") 

这是因为当我不执行binascii时。unhexlify对Python中的十六进制字符串输入,我为两个方法呈现相同的结果。然而,Python HMAC-SHA256需要binascii。unhexlify 操作。

我做了很多研究,甚至尝试导入Python用来执行binascii的方法。unhexlify在Java中,但我仍然无法产生相同的结果。在解决这个问题时,任何帮助和/或建议都将非常感激。有人能帮我一下吗?

这可能有帮助…我已经在Java和Python中创建了创建哈希的代码,并将代码上传到Github。

两个程序在base64中创建相同的哈希码。

Repo URL: https://github.com/AsadShakeel/HMAC-Java-Python-Hashing

最新更新