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