【问题标题】:How to generate HMAC SHA 256 using hmacutils in java如何在 java 中使用 hmacutils 生成 HMAC SHA 256
【发布时间】:2018-03-11 17:13:39
【问题描述】:

我一直在尝试使用如下代码为 API 生成 HMAC:

public static void main(String[] args) {

    byte[] hmacSha256 = HmacUtils.hmacSha256(API_SECRET, "totalParams");

    System.out.println((Base64.getEncoder().encodeToString(hmacSha256)));
}

但是当我使用我在 API 调用中得到的字符串时,我收到了错误:

{"code":-1100,"msg":"参数中发现非法字符 '签名';合法范围是 '^[A-Fa-f0-9]{64}$'。"}

我认为这意味着我必须转换为十六进制,但十六进制也不起作用。

我不关心实现,我只想要一个有效的签名。任何人都知道如何以任何方式生成有效签名?

【问题讨论】:

  • 您的 API_SECRET 是否包含不同于 0-9 和 a-f 的字符?
  • 是的。那我应该把它转换成十六进制吗?
  • 您使用的是什么版本的 commons-codec,1.10 还是 1.11?
  • 为什么使用HmacUtils?您可以使用javax.crypto.Mac 完成所有操作。
  • 这给了我完全相同的 HMAC,但它不起作用。

标签: java hmac sha


【解决方案1】:

查看this answer 到类似的问题,然后this answer 将您的byte[] 转换为十六进制而不是使用Base64。

(短版:你有 256 位哈希,API 需要 64 个字符。Base64 给你 44(ish),但十六进制应该给你 64)

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2012-07-07
    • 2020-12-24
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多