【发布时间】:2013-06-17 18:13:18
【问题描述】:
当 Facebook 发送实时更新时,它们会在 HTTP 标头中包含 X-Hub-Signature。根据their documentation,他们使用 SHA1 和应用程序密钥作为密钥。
基于 C# 的 similar question,我尝试验证这样的签名(“body”是 facebook 在请求正文中发送的消息):
String passedSignature = req.getHeader("X-Hub-Signature").substring(5);
Mac hmac = Mac.getInstance("HmacSHA1");
hmac.init(new SecretKeySpec(FACEBOOK_SECRET.getBytes(Charset.forName("UTF-8")), "HmacSHA1"));
String calculatedSignature = Hex.encodeHexString(hmac.doFinal(body.getBytes(Charset.forName("UTF-8"))));
logger.debug("Calculated sigSHA1: " + calculatedSignature + " passedSignature: " + passedSignature);
但传递的签名总是与计算的签名不同。
谁能帮忙解决问题?
【问题讨论】:
-
您不需要定义
Charset.forName("UTF-8"),因为 FB 密码仅使用 Latin1 字符 (ISO8859-1)。
标签: java facebook sha real-time-updates