使用GitHub生成的HMAC Hex Digest与Java提供的摘要不匹配

时间:2015-09-03 13:03:48

标签: java github sha

这是我在Java端使用的代码

private String encodedHexString(String secretKey, String payload)
        throws NoSuchAlgorithmException, InvalidKeyException {

    SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(),"HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(keySpec);

    byte[] payloadDigest = mac.doFinal(payload.getBytes());
    String encodedDigest = DatatypeConverter.printHexBinary(payloadDigest);
    return encodedDigest;
}

其中 secretKey 是在GitHub端输入的秘密令牌以及我身边的有效负载,我在request.getParameter("payload") application/x-www-form-urlencoded Content-type中获得了有效负载。

不幸的是,

将其与request.getHeader("X-Hub-Signature")匹配,即使在Java端附加"sha1="之后也是如此。

1 个答案:

答案 0 :(得分:1)

我成功完成了简单编码整个请求体,没有任何参数解析,unescaping等:

String secret = "73fcce1ecaeeb4136f27854eaaacb785929bb9a3";
String payload = "payload=%7B%22zen%22%3A%22It%27s+not+fully+shipped+until+it%27s+fast.%22%2C%22hook_id%2...";
System.out.println(encodedHexString(secret, payload));

结果是:

0F026F9E5107F4BF377CA032C1431BFED687B6E9

这很好地匹配了X-Hub-Signature标题:

X-Hub-Signature: sha1=0f026f9e5107f4bf377ca032c1431bfed687b6e9