3

私は現在、非常に軽量な (低プロセッサ/低メモリ) Linux デバイスの bash スクリプトで linux md5sum コマンドを使用して、単一のディレクトリにある何千もの同様の名前の 32 MB ファイルのチェックサムを返し、記録しています。

md5sum ./file* >fingerprint.txt

翌日、同じファイル セットに対してプロセスを繰り返し、前日のハッシュの結果をプログラムで比較します。ファイルのフィンガープリントが day1 と day2 の間に変更されていることがわかった場合、その特定のファイルに対してアクションを実行します。ファイルが変更されていない場合は、何もせずに比較を続けます。

私が直面している問題は、md5 メソッドが各ファイルを処理するのに長い時間がかかることです。比較は特定の時間内に完了する必要があり、プロセス全体に時間がかかりすぎるというインシデントに遭遇し始めています。

この種の比較を確実に実行するために使用できる他の方法/ツールはありますか? (ファイルの日付比較を実行するには十分ではなく、ファイル サイズは一定の 32 MB のままであることに注意してください)

4

2 に答える 2

3

MD5 は、暗号化ハッシュ関数の中で高速であると想定されています。しかし、特定の実装では、特定のマシンで次善のパフォーマンスを意味する選択を行う可能性があります。どのようなハードウェアを使用していますか? プロセッサーのタイプと L1 キャッシュのサイズは非常に重要です。

sphlibをご覧になることをお勧めします。これは、多くの暗号化ハッシュ関数を C (最適化されていますが移植可能) および Java で実装するライブラリです。C コードは、小さな組み込みプラットフォームで役立つ追加の「小さなフットプリント」フラグを使用してコンパイルできます (主に L1 キャッシュ サイズの問題による)。また、コードには md5sum のようなコマンドライン ユーティリティと速度ベンチマーク ツールが付属しています。

ハッシュ関数の中で、通常は MD4 が最も高速ですが、一部のプラットフォームでは Panama、Radiogatun[32]、Radiogatun[64] が同等またはそれ以上のパフォーマンスを達成できます。また、SHA-3 候補のいくつか、特に小規模な 32 ビット システムで非常に高速な Shabal を確認することもできます。

重要な注意:一部のハッシュ関数は、衝突を作成する可能性があるという点で「壊れています」: 2 つの異なる入力ファイルが同じ値にハッシュされます (まさに回避したいこと)。したがって、MD4 と MD5 は「壊れています」。ただし、衝突は意図的に行う必要があります。(不運な) 偶然に衝突することはありません (計算中のハードウェア エラーによる「衝突」よりも確率は低くなります)。セキュリティ関連の状況にある場合 (誰かが積極的に衝突を引き起こしたいと思うかもしれません)、事態はより困難になります。私が引用したものの中で、Radiogatun と Shabal の機能は現在壊れていません。

于 2011-04-03T18:06:05.990 に答える
0

高速化する方法:

  • 複数のコアがある場合、一度に複数の md5hash プロセスを使用できます。しかし、あなたの問題はディスク アクセスにあると思われます。その場合、これは役に立たないかもしれません。
  • 本当に MD5 ハッシュを行う必要がありますか? ハッシュの代わりに変更日時、サイズ、INODE をチェックして簡単にチェック
  • クイック チェックを毎日実行し、スロー MD5 チェックを毎週実行することを検討してください

毎回すべてのファイルの MD5 ハッシュを実際に実行する必要はないと思います。実際の要件と、それらを満たす最小のソリューションは何かを慎重に検討することをお勧めします。

于 2011-04-02T08:42:04.663 に答える