HMACSHA256加密算法在不同系统下会得出不同值吗?

shoppo0505 2020-08-13 11:41:00
事情是这样的,程序开发完毕之后,添加了一些测试案例,其中一个案例是对比加密数据,判断数据是否有效。
加密函数大致如下:

private String generate(String message) {
byte[] hmacSha256 = null;
String secretKey = "secretKey";
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secretKeySpec);
hmacSha256 = sha256_HMAC.doFinal(message.getBytes("UTF-8"));

return ntpProperties.getPriceCheckPrefix() + DatatypeConverter.printHexBinary(hmacSha256);
}
这个函数算出来的值会和发送过来的加密数据比对,如果相同就表示有效数据。

在windows机器上面,测试案例都正常,在不同的机器上面都测试国,但是到linux上面之后,测试直接挂掉了,根据结果,判断应该是这个函数返回值和windows机器上面不一样,要命的是,因为测试机器没有权限,都看不到日志数据。

这里想问一下DatatypeConverter.printHexBinary 这个函数转换在不同的系统下面,会出问题吗?还是需要自己写?我看网上很多案例都是自己写的。
...全文
5841 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
苜苜的烂笔头 2020-08-17
  • 打赏
  • 举报
回复
同问
shoppo0505 2020-08-17
  • 打赏
  • 举报
回复
没人知道吗?
苜苜的烂笔头 2020-08-17
  • 打赏
  • 举报
回复
引用 4 楼 shoppo0505的回复:
[quote=引用 2 楼 苜苜的烂笔头 的回复:]同问
就你问了,也是同道中人了,分就给你吧,:)[/quote] 谢谢大佬
shoppo0505 2020-08-17
  • 打赏
  • 举报
回复
引用 2 楼 苜苜的烂笔头 的回复:
同问
就你问了,也是同道中人了,分就给你吧,:)
shoppo0505 2020-08-17
  • 打赏
  • 举报
回复
引用 2 楼 苜苜的烂笔头 的回复:
同问
我找到原因了,是因为在不同环境下(可能os,jdk或者其他什么),dto转json的时候,property的顺序会有变动,导致生成的加密字段不一样。 解决方法: dto中使用@JsonOrderProperty 来定义property生成顺序,然后用objectmapper.writeValueAsBytes来生成字符串就可以了。 根据HMACSHA256算法,在任何环境下,message和key相同的话,生成的加密字符串也都一样。

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧