有一个(可能很大)唯一文本行列表(字符串化
JSON数据)我需要计算整个文本文档的唯一哈希.通常会在文档中附加新行,有时会从中删除一些行,从而导致文档的全新哈希.
最终目标是能够仅使用哈希来识别相同的文档.
当然,在每次修改之后计算整个文档的SHA1哈希值会给我所需的唯一哈希值,但是计算成本也很高 – 特别是在只有大约40个字节附加到5兆字节文档的情况下,所有这些数据都会必须再次通过SHA1计算.
所以,我正在研究一种允许我减少计算新哈希所需时间的解决方案.
问题属性/要求的摘要:
>每一行都保证是独一无二的
>线条的顺序不一定重要(如果没有则更好)
>单行的长度通常很小,但整个文档可能很大
>可以针对附加数据优化算法(即,在这种情况下删除数据甚至可能需要从头开始重新启动)
我目前的想法是单独计算每一行的SHA1(或其他)散列,然后将散列异或.这应该满足所有要求.对于新行,我只计算该行的SHA1,并用已知总和对其进行异或.
但是,我有点怀疑,因为……
>我不确定XORed哈希是否仍然足够强大以准确识别文档(即,不需要的冲突的概率是否明显更高?)
>计算许多短线的SHA1哈希值可能是计算上昂贵的(至少在初始化期间)
任何人都能对这些问题有所了解吗?
或者,通常可能使用SHA1(或类似的哈希)快速生成附加数据的新哈希(旧哈希附加数据=新哈希)?
最佳答案 单独散列每个文件存在问题.
如果添加两条相同的线,则组合的xor不会改变.
散列所有单独的线条哈希可能会更好.
也许使用Merkle Tree.