使用 JavaScript 计算 Blob 的哈希值

Calculate the hash of Blob using JavaScript

本文关键字:哈希值 Blob 计算 JavaScript 使用      更新时间:2023-09-26

我想比较两个Blob,看看它们之间是否有变化。

一种方法是计算 blob 的哈希值,然后比较它们,例如:

hash(firstBlob) === hash(secondBlob)

如何计算 Blob 的哈希值并检查另一个哈希值以查看它们是否已更改?

可以使用

FileReader API 获取 Blob 的内容以进行比较。如果你必须为此使用CryptoJS,你可以使用readAsBinaryString

var a = new FileReader();
a.readAsBinaryString(blob);
a.onloadend = function () {
  console.log(CryptoJS.MD5(CryptoJS.enc.Latin1.parse(a.result)));
};

请注意,readAsBinaryString已弃用,因此如果可以使用其他库(如 SparkMD5),则可以改用数组缓冲区:

var a = new FileReader();
a.readAsArrayBuffer(blob);
a.onloadend = function () {
  console.log(SparkMD5.ArrayBuffer.hash(a.result));
};
我知道

这有点旧,但对于寻求更好和更新解决方案的人,请使用加密 API 和 SHA-256 或更高版本的算法变体,因为 MD5 具有可利用的缺陷。

var a = new FileReader();
a.readAsArrayBuffer(blob);
a.onloadend = function () {
  let hashPromise = crypto.subtle.digest("SHA-256", a.result);// it outputs a promise
};