我有一个(可能很大的)唯一文本行(字符串化JSON数据)列表,我需要为整个文本文档计算一个唯一哈希值。通常,新行将附加到文档中,偶尔某些行会从中删除,导致文档完全重新生成哈希值。
最终目标是只使用哈希来识别相同的文档。
当然,在每次修改后为整个文档计算SHA1哈希将给我所需的唯一哈希,但这也是计算密集型的,特别是在仅向5兆字节的文档追加了约40字节并且所有数据都必须再次通过SHA1计算的情况下。
因此,我正在寻找一种解决方案,可以使我减少计算新哈希所需的时间。
问题属性/要求的摘要:
- 每行都保证是唯一的 - 行的顺序不一定重要(最好是如此) - 单行的长度通常很小,但整个文档可能很大 - 该算法可以针对添加的数据进行优化(即,如果要删除数据,则在这种情况下甚至可能需要重新开始)
我的当前想法是单独为每个单独行计算SHA1(或任何其他)哈希值,然后将哈希值异或在一起。这应该满足所有要求。对于新行,我只需计算该行的SHA1并将其与已知总和异或。
但是,我有疑虑,因为...
- 我不确定XOR哈希是否仍然足够强大,以确切地识别文档(即,是否存在意外冲突的可能性显着更高?) - 计算大量短行的SHA1哈希本身可能是计算密集型的(至少在初始化期间)
有人能为这些问题提供一些帮助吗?
另外,也许通常可以使用SHA1(或类似的哈希)快速生成附加数据的新哈希(旧哈希+添加数据=新哈希)吗?
最终目标是只使用哈希来识别相同的文档。
当然,在每次修改后为整个文档计算SHA1哈希将给我所需的唯一哈希,但这也是计算密集型的,特别是在仅向5兆字节的文档追加了约40字节并且所有数据都必须再次通过SHA1计算的情况下。
因此,我正在寻找一种解决方案,可以使我减少计算新哈希所需的时间。
问题属性/要求的摘要:
- 每行都保证是唯一的 - 行的顺序不一定重要(最好是如此) - 单行的长度通常很小,但整个文档可能很大 - 该算法可以针对添加的数据进行优化(即,如果要删除数据,则在这种情况下甚至可能需要重新开始)
我的当前想法是单独为每个单独行计算SHA1(或任何其他)哈希值,然后将哈希值异或在一起。这应该满足所有要求。对于新行,我只需计算该行的SHA1并将其与已知总和异或。
但是,我有疑虑,因为...
- 我不确定XOR哈希是否仍然足够强大,以确切地识别文档(即,是否存在意外冲突的可能性显着更高?) - 计算大量短行的SHA1哈希本身可能是计算密集型的(至少在初始化期间)
有人能为这些问题提供一些帮助吗?
另外,也许通常可以使用SHA1(或类似的哈希)快速生成附加数据的新哈希(旧哈希+添加数据=新哈希)吗?
sha1
的 JavaScript 实现? - vp_arth