我多次尝试使用node.js crypto
包来计算req.body
SHA1值。但总有不同。
我使用以下代码:
var body = req.body;
var sig = 'sha1=' + crypto.createHmac('sha1', secret).update(JSON.stringify(body)).digest('hex');
console.log(sig === req.headers['x-hub-signature']) // not equal :(
或
var body = req.body;
var sig = 'sha1=' + crypto.createHmac('sha1', secret).update(new Buffer(JSON.stringify(body))).digest('hex');
console.log(sig === req.headers['x-hub-signature']) //not equal :(
我很感激你能给我的任何帮助!
谢谢:)
答案 0 :(得分:0)
最后,我知道导致这个问题的原因。
因为,Github将一个字符串发布到我的服务器上,Github将这个字符串的SHA1值设置为。但是使用我的nodejs代码,我使用body-parser
包作为中间件,所以我得到了
{
payload: {...}
}
和SHA1,因此,永远不会相等。
现在,我们知道原因,我们可以解决这个问题。刚 var bufferArr = [];
var bufferLen = 0;
req.on('data', function(chunk) {
bufferArr.push(chunk);
bufferLen += chunk.length;
});
req.on('end', function() {
var data = Buffer.concat(bufferArr, bufferLen).toString();
var sig = 'sha1=' + crypto.createHmac('sha1', secret)
.update(data).digest('hex');
console.log(sig === req.headers['x-hub-signature']) // true
}
我希望我的经验可以帮助别人