【问题标题】:hash in nodejs is different from hash in terminalnodejs中的哈希与终端中的哈希不同
【发布时间】:2019-09-20 18:58:39
【问题描述】:

我想在 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);

【问题讨论】:

  • 您的代码有效。我检查并复制了
  • 是的,我知道它可以工作,但为什么哈希值与我在终端中获取的不同?
  • 哈希值也一样。我检查了
  • 好吧,很奇怪..对我来说绝对不一样
  • 看答案。我刚刚发布了

标签: node.js hash md5


【解决方案1】:

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

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

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

【讨论】:

  • 我不认为,我使用async.waterfall 来避免这种情况
  • 可以分享一下绑定回调让async.waterfall执行下一步吗?
  • 好的,我明白了,回调确实没有放在正确的位置。解决了
猜你喜欢
  • 2011-05-27
  • 2020-06-24
  • 2020-08-11
  • 2019-03-26
  • 2014-08-19
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多