java - 使用 GitHub 生成的 HMAC 十六进制摘要与 Java 提供的摘要不匹配

标签 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 端以及我端输入的 secret token ,有效负载是我在 request.getParameter("payload") 中获得的内容对于 application/x-www-form-urlencoded 内容类型

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

最佳答案

我成功地简单地编码了整个请求正文,没有任何类型的参数解析、转义等:

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 header 非常匹配:

X-Hub-Signature: sha1=0f026f9e5107f4bf377ca032c1431bfed687b6e9

关于java - 使用 GitHub 生成的 HMAC 十六进制摘要与 Java 提供的摘要不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376456/

相关文章:

Java 10 : Replacement for java. xml.ws 冲突

git - 根据 pull 请求的更改请求更改 git 分支?

Ruby SHA2 摘要不正确的文档或我的 IRB 中的问题?

java - 如何在java中并行化for循环?

java - 向 PUC 发布报告时出错

github - 大查询 : When is GHTorrent refreshed and how to get up to date information?

javascript - 我的网站图标代码不工作....我按照指南中所说的那样做了代码

ssl - 如何验证我的网站使用的是 SHA256RSA SSL 证书?

chalice 2.0 : Invalid SHA1

java - 更新 edt 中的 swing 组件