我有7个文件,我正在生成MD5哈希.散列用于确保数据存储的远程副本与本地副本相同.不幸的是,这两个数据副本之间的联系令人非常缓慢.对数据的更改非常罕见,但我要求始终(或尽快)同步数据.我不想在我的(极慢)通信链路上传递7个不同的MD5哈希值,而是想为每个文件生成哈希值,然后将这些哈希值组合成一个哈希值,然后我可以将其传输然后重新计算/用于比较在偏远的一边.如果"组合哈希"不同,那么我将开始发送7个单独的哈希值来确定哪些文件已被更改.例如,以下是截至上周的7个文件的MD5哈希值:
0709d609d69385255c496436eb50402c
709465a74411bd596595c7b9b158ae6a
4ab657320ef33e3d5eb498e4c13d41b7
3b49c6ab199994fd776bb63761414e72
0fc28c5a010fc3c06c0c930c88e31a15
c4ecd214662cac5aae0e53f6f252bf0e
8b086431e43148a2c2d943ba30d31cc6
Run Code Online (Sandbox Code Playgroud)
我想将这些哈希组合在一起,这样我就可以得到一个唯一的值(也许是另一个MD5哈希?)然后我可以发送到远程系统.在远程系统上,我然后执行相同的计算以确定整个数据是否已更改.如果有,那么我就开始发送单独的哈希值等.最重要的因素是我的"组合哈希"足够短,因此它使用的带宽少于首先发送所有7个哈希值.我想过将7个MD5哈希值写入文件,然后对该文件进行哈希处理,但有更好的方法吗?
您只需计算连接在一起的所有七个文件的内容的哈希值即可。
但是,我不建议这样做,因为您可能会遇到微妙的错误,例如:
file1: 01 02 03 04 file2: 05 06 07 08
Run Code Online (Sandbox Code Playgroud)
将哈希相同
file1: 01 02 file2: 03 04 05 06 07 08
Run Code Online (Sandbox Code Playgroud)
您的通讯链接有多慢?单个 MD5 哈希值是 32 字节。
其中7个小于1/4KB;这只是数据不多。
文件将在链接的哪一侧发生更改?
您可以在该端缓存一组 MD5,然后定期将文件与缓存的哈希值进行比较,然后在发现差异时启动传输。
小智 5
你为什么不呢?
如果您的总体哈希值与另一端匹配,则无需执行任何操作。如果没有,那么您将开始发送中间的7个哈希值,以确定哪些文件已更改。