NPM 'crypto', возвращающий значения хеш-функции, отличные от сетевых генераторов (узел) - PullRequest
0 голосов
/ 04 января 2019

Я, вероятно, неправильно использую модуль crypto, возможно, кто-то может мне помочь.

Цель состоит в том, чтобы найти хэш sha-256 файла, помещенного в dropzone.Проблема в том, что возвращаемый хеш отличается от онлайн-хеш-контроллеров (которые возвращают, казалось бы, правильные значения).Вот мой код:

const crypto = require("crypto");
const hash = crypto.createHash("sha256");

handleOnDrop = file => {
    hash.update(file);
    const hashOutput = hash.digest("hex");
    console.log(hashOutput);
  };

Crypto docs - https://nodejs.org/api/crypto.html#crypto_node_js_crypto_constants

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

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 04 января 2019

События Dropzone возвращают объект класса Файл , этот объект основан на классе Blob и не обеспечивает прямой доступ к данным файла.Чтобы использовать данные в файле, вы должны использовать класс FileReader , как описано в примерах Mozilla

Crypto ожидает буфер при вызове hash.update, но file не является буфером, как это было бы в этих примерах .Добавление большого двоичного объекта в hash.update, вероятно, не соответствует ожидаемому поведению.

Итак, если вы используете WebPack для предоставления доступа к стандартным библиотекам Node, ваш код должен выполнить что-то вроде этого:

  handleOnDrop = ((file) => {
    const reader = new FileReader();
    reader.onload = ((event) => {
      hash.update(Buffer.from(event.target.result));
      const hashOutput = hash.digest("hex");
      console.log(hashOutput);
    });
    reader.readAsArrayBuffer(file);
  });
...