0

File::Find を使用してネットワーク ファイル システムのインデックスを作成する Perl スクリプト (Windows) を作成しています。うまく機能しますが、ファイル システムのクロールには非常に時間がかかります。ディレクトリをトラバースする前に何らかの方法でディレクトリのチェックサムを取得するといいと思っていましたが、チェックサムが前回の実行で取得されたチェックサムと一致する場合は、ディレクトリをトラバースしません。このファイル システム上のファイルは頻繁には変更されないため、これにより多くの処理が不要になります。

私の AIX ボックスでは、次のコマンドを使用します。

csum -h MD5 /directory

次のようなものを返します。

5cfe4faf4ad739219b6140054005d506  /directory

このコマンドにはほとんど時間がかかりません。

time csum -h MD5 /directory
5cfe4faf4ad739219b6140054005d506  /directory

real    0m0.00s
user    0m0.00s
sys     0m0.00s

これを行うモジュールを CPAN で検索しましたが、すべてのモジュールが、ディレクトリ自体ではなく、ディレクトリ内のすべてのファイルの MD5sum を提供するようです。

Perl でディレクトリの MD5sum を取得する方法はありますか、それとも Windows で Perl から Win32 コマンドを呼び出すことができるのでしょうか?

前もって感謝します!

4

5 に答える 5

2

チェックサムを取得するには、ファイルを読み取らなければなりません。これは、ファイルシステムを調べる必要があることを意味します。これは、脱出しようとしているのと同じボートに戻ることになります。

于 2009-05-26T16:00:46.320 に答える
1

他の良い答えに加えて、これを追加させてください:チェックサムが必要な場合は、(壊れた!ハッシュ関数の代わりにチェックサムアルゴリズムを使用してください。

ファイルインデクサーに暗号的に安全なハッシュ関数が必要ないとは思いません。代わりに、リスト全体を保存せずにディレクトリリストに変更があるかどうかを確認する方法が必要です。入力が変更されると、チェックサム アルゴリズムは異なる出力を返します。ハッシュ関数よりも単純であるため、より高速に実行できる可能性があります。

ユーザーが、チェックサムによって検出されない方法でディレクトリを変更できることは事実です。ただし、ファイル名の通常の変更では (高い確率で) 異なるチェックサムが生成されるため、ユーザーは意図的にこのようにファイル名を変更する必要があります。では、この「攻撃」を防御する必要があるのでしょうか?

各攻撃の結果を常に考慮し、適切なツールを選択する必要があります。

于 2009-06-03T22:26:08.113 に答える
0

興味があれば、Pythonでこれらのいずれかを行いました:

http://akiscode.com/articles/sha-1directoryhash.shtml

于 2009-10-30T07:36:15.607 に答える