【发布时间】:2013-12-17 00:02:13
【问题描述】:
我想比较两个Blobs,看看它们之间是否有变化。
一种方法是计算 blob 的哈希值,然后比较它们,例如:
hash(firstBlob) === hash(secondBlob)
如何计算 Blob 的哈希值并检查另一个哈希值是否已更改?
【问题讨论】:
标签: javascript
我想比较两个Blobs,看看它们之间是否有变化。
一种方法是计算 blob 的哈希值,然后比较它们,例如:
hash(firstBlob) === hash(secondBlob)
如何计算 Blob 的哈希值并检查另一个哈希值是否已更改?
【问题讨论】:
标签: javascript
您可以使用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));
};
【讨论】:
readAs* 被定义为异步的,这意味着 onloadend 函数将在事件被调用之前被定义。
我知道这有点旧,但对于寻找更好和更新解决方案的人,请使用Crypto API 和算法的 SHA-256 或更高版本,因为 MD5 有 exploitable 缺陷。
var a = new FileReader();
a.readAsArrayBuffer(blob);
a.onloadend = function () {
let hashPromise = crypto.subtle.digest("SHA-256", a.result);// it outputs a promise
};
【讨论】: