NPM"加密"返回与在线生成器(节点)不同的哈希值



我可能没有正确使用crypto模块,也许有人可以帮助我。

目标是找到放入dropzone中的文件的 sha-256 哈希。问题是返回的哈希与在线哈希检查器(返回看似正确的值)不同。这是我的代码:

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

加密文档 - https://nodejs.org/api/crypto.html#crypto_node_js_crypto_constants

相当确定我从这段代码中获得的哈希值不仅仅是文件名,我用在线检查器检查了一些排列。

有什么想法吗?谢谢!

Dropzone 事件返回一个 File 类对象,此对象基于 Blob 类,不提供对文件数据的直接访问。 为了使用文件中的数据,您必须使用 Mozilla 示例中概述的 FileReader 类

当您调用hash.update时,Crypto 需要一个缓冲区,但file不像这些示例中那样是缓冲区。将 Blob 放入hash.update可能没有预期的行为。

因此,假设您使用 WebPack 来提供对 Node 标准库的访问,您的代码应该需要执行以下操作:

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

最新更新