【发布时间】: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,但它不起作用。