私は、ファイルシステムWindow / Linux/Unix上のすべてのファイルのハッシュを作成するプログラムを作成しようとしています。次に、スクリプトは、既知の不正なハッシュ値のファイルに対してそれをチェックします。ファイルシステム内のハッシュがファイル内の何かと一致する場合は、一致するものを出力します。これについて何か考えはありますか?
私はPythonを初めて使用し、これを行うための最も効率的な方法に興味があります。
ファイルシステム内のファイルをウォークスルーするには、 を使用しますos.walk
。ファイルごとに、組み込みのライブラリを使用してハッシュを作成できますhashlib
。
最小限の実例:
import os, hashlib
current_dir = os.getcwd()
for root,dirs,files in os.walk(current_dir):
for f in files:
current_file = os.path.join(root,f)
H = hashlib.md5()
with open(current_file) as FIN:
H.update(FIN.read())
print current_file, H.hexdigest()
検出する一連のハッシュを作成することから始めます。
badHash_set = set(['1234', 'abcd'])
次に、確認するディレクトリ ツリーのルートで os.walk を使用します。
http://docs.python.org/2/library/os.html#os.walk
for root, dirs, files in os.walk(base_path):
for file_str in files:
file_obj = file(os.path.join(root, file_str))
file_md5 = hashlib.md5(file_obj.read()).hexdigest()
if file_md5 in badHash_set:
# ...complain
ただし、これはおそらく非常に遅くなるでしょう。それが問題になるかどうかは明らかではありません。