Java方法可以为Hex中的HMAC-SHA256提供与Python方法相同的输出

问题描述

您确定您的键和输入是相同的并且在java和python中都正确编码吗?

HMAC-SHA256在两个平台上均相同。

爪哇

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec("1234".getBytes(), "HmacSHA256");
sha256_HMAC.init(secretKey);
byte[] hash = sha256_HMAC.doFinal("test".getBytes());
String check = Hex.encodeHexString(hash);
System.out.println(new String(check));

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f

蟒蛇

print hmac.new("1234", "test", hashlib.sha256).hexdigest();

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f

解决方法

我现在正尝试使用Java使用HMAC-
SHA256对字符串进行编码。匹配由Python使用生成的另一组编码字符串所需的编码字符串hmac.new(mySecret,myPolicy,hashlib.sha256).hexdigest()。我努力了

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(),"HmacSHA256");
    sha256_HMAC.init(secretKey);

    byte[] hash = sha256_HMAC.doFinal(policy.getBytes());
    byte[] hexB = new Hex().encode(hash);
    String check = Hex.encodeHexString(hash);
    String sha256 = DigestUtils.sha256Hex(secret.getBytes());

在我将它们打印出来后,hash,hexB,check和sha256没有提供与以下Python加密方法相同的结果

hmac.new(mySecret,hashlib.sha256).hexdigest()

因此,我尝试寻找该库或类似于上述Python函数的库。有人可以帮我吗?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”