Node.js中的哈希与终端中的哈希不同

时间:2019-05-02 09:21:52

标签: node.js hash md5

我想在nodejs中获取文件的md5哈希,但是我得到的哈希与我可以直接从终端获得的哈希不同。

在nodejs中,我正在这样做(来自here

var fd = fs.createReadStream('path/to/my/file');
var hash = crypto.createHash('md5');
hash.setEncoding('hex');

fd.on('end', function() {
    hash.end();
    console.log(hash.read()); // the desired sha1sum
});

fd.pipe(hash);

,输出为d41d8cd98f00b204e9800998ecf8427e

在我的终端上,我这样做:

md5sum path/to/my/file

输出为f6ef86836065f2370ebd9b1caadce3b4

您知道为什么吗?

谢谢

编辑

这是我的代码:

//Download file
var firmware = fs.createWriteStream(desiredFirmwareProperties.fwName);
var r = https.get(desiredFirmwareProperties.fwURI, function(response) {
    response.pipe(firmware);
});

//Checksum
var fd = fs.createReadStream(desiredFirmwareProperties.fwName);
var hash = crypto.createHash(desiredFirmwareProperties.fwChecksumAlgo);     
hash.setEncoding('hex');
fd.on('end', function() {
    hash.end();
    console.log(desiredFirmwareProperties.fwChecksum);
    console.log(hash.read());
});
fd.pipe(hash);

1 个答案:

答案 0 :(得分:0)

我知道了,这是一个异步过程,您试图在下载完成之前读取文件

将校验和过程置于“关闭”事件中:

firmware.on('close', () => {
  <checksum here>
})