这是我在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="
之后也是如此。
答案 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