хеш в nodejs отличается от хеша в терминале - PullRequest
0 голосов
/ 02 мая 2019

Я хотел бы получить md5-хеш файла в nodejs, но получаемый хеш отличается от хеша, который я могу получить непосредственно из терминала.

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

1 Ответ

0 голосов
/ 02 мая 2019

Я понял, это асинхронная процедура, вы пытались прочитать файл до окончания загрузки

поместите процедуру контрольной суммы в событие 'close':

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