Android(Java)方法相当于Hex中的Python HMAC-SHA256

时间:2014-07-03 13:25:31

标签: java android 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中获得相同的输出:

爪哇

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等同于Python的代码:

key = binascii.unhexlify("0123465789")

&安培;

msg = binascii.unhexlify("ABCDEF") 

这是因为当我不在Python中对Hex-String输入执行 binascii.unhexlify 时,我会为这两种方法呈现相同的结果。但是,Python HMAC-SHA256需要 binascii.unhexlify 操作。

我做了很多研究,甚至尝试导入Python用来在Java中执行 binascii.unhexlify 的方法,但我仍然无法生成相同的结果。在解决此问题时,任何帮助和/或建议都将不胜感激。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

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

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

回购网址:https://github.com/AsadShakeel/HMAC-Java-Python-Hashing