通过HmacSHA512的哈希数据在调用外部API时返回错误

时间:2017-12-23 10:19:34

标签: java api http hash hmac

我正在尝试使用此API WebView

首先,我想将基本方法info称为postman我在标题中添加到字段的原因:

  • API-Key - >我的api密钥
  • API-Hash - >通过HMAC SHA512签名在下面生成的哈希值。

我如何生成API-Hash? 我用Java简单的方法编写了如下:

  public String encodeDataViaHMAC(String msg, String keyString, String algo) {
        String digest = null;
        try {
            SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), algo);
            Mac mac = Mac.getInstance(algo);
            mac.init(key);

            byte[] bytes = mac.doFinal(msg.getBytes("ASCII"));

            StringBuffer hash = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                String hex = Integer.toHexString(0xFF & bytes[i]);
                if (hex.length() == 1) {
                    hash.append('0');
                }
                hash.append(hex);
            }
            digest = hash.toString();
        } catch (UnsupportedEncodingException e) {
        } catch (InvalidKeyException e) {
        } catch (NoSuchAlgorithmException e) {
        }
        return digest;
    }

然后我传给它参数:

  • 请求参数图:

Map<String, Object> m = new LinkedHashMap<>(); m.put("method", "info"); m.put("tonce", System.currentTimeMillis());

  • 私钥
  • 方法名称为HmacSHA512

之后我仍然得到postman错误:

{"error":502,"errorMsg":"Invalid message hash","time":1514023708}

有没有人可以帮助我做错了什么,可以帮我修复它?

0 个答案:

没有答案