PHP 与 Node.js 中计算的不同 sha1 哈希值

Different sha1 hashes calculated in PHP vs Node.js

知道为什么以下代码片段会生成不同的哈希值吗?在生成哈希之前,我将文件的内容和文件名连接起来。我的目标是让节点代码生成与下面的 PHP 代码相同的 sha1 哈希。

PHP代码:

$filename = 'picture.jpg';
$filecontent = file_get_contents($filename);
$hash = sha1($filecontent.$filename);
print "PHP  hash:$hash\n";

节点代码:

var co = require('co');
var cofs = require('co-fs');

var filename = 'picture.jpg';
co(function*(){
  var filecontent = yield cofs.readFile(filename);
  var hash = require('crypto').createHash('sha1').update(filecontent+filename).digest('hex');
  console.log('node hash:'+hash);
});

此外,请注意,当我不将文件名连接到文件内容时,哈希值的生成是相同的。

readFile returns 您试图连接到字符串文件名的缓冲区对象。您需要使用文件名扩展文件内容缓冲区。您可以为此使用缓冲工具。

"use strict";
var co = require('co');
var cofs = require('co-fs');
var buffertools = require('buffertools');

var filename = 'picture.jpg';
co(function*(){
  var filecontent = yield cofs.readFile(filename);
  var hash = require('crypto').createHash('sha1').update(buffertools.concat(filecontent, filename)).digest('hex');
  console.log('node hash:'+hash);
}).catch(function(err) {
  console.log(err);
})