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