我想创建一个文件的哈希,这样如果文件被更改,我可以确定文件的哪些部分发生了更改。问题是,如果删除或添加一个字节,所有后续散列也会发生变化,因此我需要通过所有散列遍历每个字节。然而,这可能很昂贵,所以我正在寻找一个不需要我重新计算整个哈希开始到完成而是让我撤消一个字节然后添加另一个字节的哈希。
伪代码:
字符串 getFileDiffHash(文件){ 字符串结果 = ""; 对于每个(文件中的 512 个字节){ 结果+=哈希(字节); } } 字符串 getFileDiff(文件,diffHash){ 字符串结果 = ""; 对于每个(diffHash 中的哈希大小字节){ //是的,理想情况下这将在哈希表中,但是嘿,这是伪代码 字符串 current_hash = ""; for (i = 0; i < file_size(file); i++){ if (current_hash.size > hash_size){ current_hash = undo_hash(current_hash, file[i-hash_size]); } current_hash = add_hash(current_hash, file[i]); if (current_hash.size == hash_size && bytes == current_hash){ 结果 += "+"+diffHash+":"+i; } } } 返回结果; }
关于什么样的哈希适合“undo_hash”和“add_hash”的任何想法?