我可能没有正确使用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);
});
});