我试图在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 的方法,但我仍然无法生成相同的结果。在解决此问题时,任何帮助和/或建议都将不胜感激。有人可以帮帮我吗?
答案 0 :(得分:0)
这可能会有所帮助...我已经创建了代码以在 Java 和 Python 中创建哈希并将代码上传到 Github。
两个程序在 base64 中创建相同的哈希码。
回购网址:https://github.com/AsadShakeel/HMAC-Java-Python-Hashing