NodeJS hmac摘要问题与口音

我正在与Ruby,PHP和NodeJS进行比较,以获得以下代码,使用crypto模块获得NodeJS中的错误响应。

PHP

 hash_hmac('sha256', 'text', 'á'); 

ruby

 OpenSSL::HMAC.hexdigest('sha256', 'á', 'text') 

的NodeJS

 var signer = crypto.createHmac('sha256', 'á'); var expected = signer.update("text").digest('hex'); 

Ruby和PHP都返回34b3ba4ea7e8ff214f2f36b31c6a6d88cfbf542e0ae3b98ba6c0203330c9f55b ,而7dc85acba66d21e4394be4f8ead2a327c9f1adc64a99c710c98f60c425bd7411返回7dc85acba66d21e4394be4f8ead2a327c9f1adc64a99c710c98f60c425bd7411 。 我注意到,如果我在PHP中尝试使用utf8_encode('á') ,它实际上给了我Node的期望结果。

我从文件加载节点中的重音文本,如下所示:

 JSON.parse(fs.readFileSync('keys.js', 'utf8')); 

我将如何去改变我在Node中的代码来获得PHP和Ruby所呈现的结果哈希?

谢谢!

这段代码会给你正确的结果:

 var crypto = require('crypto'); var signer = crypto.createHmac('sha256', new Buffer('á', 'utf8')); var result = signer.update("text").digest('hex'); console.log(result);