首页 > 解决方案 > nodejs中的哈希与终端中的哈希不同

问题描述

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

在nodejs中,我正在这样做(从这里

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

标签: node.jshashmd5

解决方案


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

将校验和过程放在“关闭”事件中:

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

推荐阅读