我可能没有正确使用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
我相当确定我从这段代码中获得的哈希值不仅仅是文件名,我还通过在线检查器检查了一些排列。
有什么想法吗?谢谢!
答案 0 :(得分:1)
Dropzone事件返回一个File类对象,该对象基于Blob类,并且不提供对文件数据的直接访问。为了使用文件中的数据,必须使用FileReader
中概述的Mozilla examples类当您调用hash.update
时,Crypto期望有一个缓冲区,但是file
并不是像在这些examples中那样的缓冲区。将Blob放到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);
});