7

MD5 ハッシュを生成する 7 つのファイルがあります。ハッシュは、データ ストアのリモート コピーがローカル コピーと同一であることを確認するために使用されます。残念ながら、これら 2 つのデータのコピー間のリンクは、気が遠くなるほど遅いです。データの変更は非常にまれですが、データを常に (またはできるだけ早く) 同期する必要があります。(非常に遅い) 通信リンクで 7 つの異なる MD5 ハッシュを渡すのではなく、各ファイルのハッシュを生成し、これらのハッシュを 1 つのハッシュに結合して転送し、再計算して比較に使用したいと考えています。リモート側で。「結合されたハッシュ」が異なる場合は、変更されたファイルを正確に判断するために、7 つの個別のハッシュの送信を開始します。例えば、

0709d609d69385255c496436eb50402c
709465a74411bd596595c7b9b158ae6a
4ab657320ef33e3d5eb498e4c13d41b7
3b49c6ab199994fd776bb63761414e72
0fc28c5a010fc3c06c0c930c88e31a15
c4ecd214662cac5aae0e53f6f252bf0e
8b086431e43148a2c2d943ba30d31cc6

これらのハッシュを組み合わせて、リモート システムに送信できる単一の一意の値 (おそらく別の MD5 ハッシュ?) を取得したいと考えています。次に、リモート システムで同じ計算を実行して、データ全体が変更されたかどうかを判断します。ある場合は、個々のハッシュなどの送信を開始します。最も重要な要素は、最初に 7 つのハッシュすべてを送信するよりも使用する帯域幅が少なくなるように、「結合されたハッシュ」が十分に短いことです。7 つの MD5 ハッシュをファイルに書き込み、そのファイルをハッシュすることを考えましたが、より良い方法はありますか?

4

5 に答える 5

6

なぜあなたはしないのですか?

  • 7 つの MD5 ハッシュを生成し (これが現在行っていることです)、次に
  • これらの 7 つのハッシュ出力を、より大きなバイト配列と MD5 ハッシュに結合して、全体的なハッシュを生成します。(各 MD5 ハッシュは 16 バイトであるため、全体のハッシュを取得するためにハッシュする 112 バイト配列になります)。

全体のハッシュが相手側と一致する場合は、何もする必要はありません。そうでない場合は、中間の 7 つのハッシュの送信を開始して、どのファイルが変更されたかを調べます。

于 2012-12-03T05:49:32.773 に答える
2

XORモール。

私が知っているように、これは最もシンプルで効果的なソリューションです。

于 2012-12-03T05:21:35.593 に答える
1

別のオプションは、最初に単一のハッシュを生成することです - https://stackoverflow.com/a/15683147/188926を参照してください

この例では、フォルダー内のすべてのファイルを反復処理しますが、代わりにファイルのリストを反復処理することもできます。

于 2013-03-28T13:31:00.183 に答える
0

これが左のフィールドから外れていることはわかっていますが、すべてのファイルのアーカイブ属性を確認するだけで、ファイルのいずれかにこのフラグが設定されている場合、ファイルは何らかの方法で変更されています.

その後、ハッシュの作成に進むことができます。そうでない場合は、最初からハッシュを生成する必要さえありません。

アーカイブ属性が設定されている場合は、ハッシュを生成し、ファイルを同期して、アーカイブ属性を設定解除します。

それが私の提案する解決策です。

于 2012-12-03T06:22:24.300 に答える