计算 sha256 忽略元数据 - Javascript

Compute sha256 ignoring metadata - Javascript

我想跟踪任何类型文件的修改,我正在使用 Javascript 和 SHA256 加密 哈希函数。

问题是对于某些类型的文件,即使文档没有实际更改,散列也会更改(我假设这是因为元数据更改)。

例如,一个 docx 格式的空 word 文档给出,比方说

 hash = 1bcf93...

如果用户打开文档又关闭它,散列会发生变化,我不希望这样。

有没有一种方法可以忽略所有文件的元数据来计算哈希值?

我正在使用 'fs' 解析文件并使用“js-sha256”计算哈希值,即 FileReader.ReadAsBinaryString(),然后是 sha256()

一般来说,如果任何单个字节具有不同的值,无论该字节多么无关紧要,加密哈希都会产生不同的哈希。这就是散列的全部意义。

根据您的具体要求,它可能会或可能不会足够接近。

如果您的要求 "does this content look similar enough to be considered equal" 对合法性的要求相当宽松,那么您可以尝试为您的所有输入生成某种程度上稳定的文本表示,然后对其进行哈希处理(例如提取文档文件的纯文本并丢弃所有格式和元数据)。

如果您需要比这更微妙的东西(例如“此文档是否有任何 用户可见的 更改),那么精确定义需要哪些部分将变得非常困难hashed 和不应该的,这意味着你 弄错这可能很糟糕(或者错误可能对你的要求来说不是什么大问题?)