繁体   English   中英

在 javascript 中拖放时,Md5 始终相同 hash

[英]Md5 always same hash when drag&drop in javascript

我有拖放事件,我想将文件拖到 hash。 我有这个:

var file = ev.dataTransfer.items[i].getAsFile();
var hashf = CryptoJS.SHA512(file).toString();
console.log("hashf", hashf)

但是当我拖动不同的文件时,“hashf”总是相同的字符串。

https://jsfiddle.net/9rfvnbza/1/

问题是您正在尝试 hash 文件 object。 Hash 算法需要一个字符串到 hash。

将文件 Object 传递给CryptoJS.SHA512()方法时,API 会尝试将 object 转换为字符串。 该转换导致CryptoJS.SHA512()接收相同的字符串,无论您发送什么文件 object 提供它。

字符串是[object File] - 您可以用该字符串替换代码中的file ,然后发现它与您一直看到的 hash 代码相同。

要解决此问题,请先从文件中检索文本并将其传递给散列算法:

file.text().then((text) => {
  const hashf = CryptoJS.SHA512(text).toString();
  console.log("hashf", hashf);
});

如果你更喜欢 async/await,你可以把它放在一个 IIFE 中:

(async() => {
  const text = await file.text()
  const hashf = CryptoJS.SHA512(text).toString();
  console.log("hashf", hashf);
})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM