PHP与Node.js

时间:2015-06-10 07:09:38

标签: php node.js sha1

为什么以下代码片段会生成不同的哈希值?我在生成哈希之前连接文件的内容和文件名。我的目标是使Node代码生成与下面的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);
});

另外,请注意,当我不将文件名连接到filecontent时,哈希的生成方式是相同的。

1 个答案:

答案 0 :(得分:0)

readFile返回一个缓冲区对象,您尝试将其连接到字符串文件名。您需要使用文件名扩展filecontent缓冲区。你可以使用buffertools。

"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);
})