Android (Java) 中等效于 Python HMAC-SHA256 的十六进制方法

1 投票
1 回答
1910 浏览
提问于 2025-04-18 12:00

我正在尝试在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中的:

key = binascii.unhexlify("0123465789")

&

msg = binascii.unhexlify("ABCDEF") 

这是因为当我在Python中不对十六进制字符串输入进行binascii.unhexlify处理时,两个方法的结果是一样的。然而,Python的HMAC-SHA256确实需要binascii.unhexlify这个操作。

我做了很多研究,甚至尝试在Java中导入Python用来执行binascii.unhexlify的方法,但仍然无法得到相同的结果。如果有人能帮我解决这个问题,我将非常感激。有没有人能帮我一下?

1 个回答

0

这可能对你有帮助……我写了一些代码,用Java和Python来生成哈希值,并把代码上传到了Github上。

这两个程序生成的哈希值都是用base64格式表示的。

代码库链接:https://github.com/AsadShakeel/HMAC-Java-Python-Hashing

撰写回答