[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
質問
私はPythonで、ファイルのMD5ハッシュをチェックし、ハッシュがオリジナルのものと一致することを確認するいくつかのコードを書きました。
以下は、私が開発したものです。
# Defines filename
filename = "file.exe"
# Gets MD5 from file
def getmd5(filename):
return m.hexdigest()
md5 = dict()
for fname in filename:
md5[fname] = getmd5(fname)
# If statement for alerting the user whether the checksum passed or failed
if md5 == '>md5 will go here<':
print("MD5 Checksum passed. You may now close this window")
input ("press enter")
else:
print("MD5 Checksum failed. Incorrect MD5 in file 'filename'. Please download a new copy")
input("press enter")
exit
しかし、このコードを実行すると、必ず以下のようなエラーが発生します。
Traceback (most recent call last):
File "C:\Users\Username\md5check.py", line 13, in <module>
md5[fname] = getmd5(fname)
File "C:\Users\Username\md5check.py, line 9, in getmd5
return m.hexdigest()
NameError: global name 'm' is not defined
私のコードに何か欠けているものはありますか?
どのように解決するのですか?
あなたのエラーと、あなたのコードに欠けているものに関して。
m
には定義されていない名前です。
getmd5()
関数で定義されていない名前です。
悪気はないのですが、あなたが初心者であることは分かっていますが、あなたのコードはあちこちに散らばっています。あなたの問題を1つずつ見ていきましょう :)
まず、あなたは
hashlib.md5.hexdigest()
メソッドを正しく使用していません。hashlib関数の説明については
Python Doc ライブラリ
. 提供された MD5 を返すための正しい方法
文字列
は、次のようにします。
>>> import hashlib
>>> hashlib.md5("filename.exe").hexdigest()
'2a53375ff139d9837e93a38a279d63e5'
しかし、ここにはもっと大きな問題があります。あなたは MD5 を ファイル名文字列 に基づいて MD5 を計算していますが、実際には、MD5 はファイル の内容 . 基本的にはファイルの内容を読み込んで、それをMD5にパイプする必要があります。次の例はあまり効率的ではありませんが、次のようなものです。
>>> import hashlib
>>> hashlib.md5(open('filename.exe','rb').read()).hexdigest()
'd41d8cd98f00b204e9800998ecf8427e'
2番目のMD5ハッシュは最初のものと全く異なることがおわかりいただけると思います。その理由は、ファイル名だけでなく、ファイルのコンテンツも通してプッシュしているからです。
簡単な解決策は、このようなものでしょう。
# Import hashlib library (md5 method is part of it)
import hashlib
# File to check
file_name = 'filename.exe'
# Correct original md5 goes here
original_md5 = '5d41402abc4b2a76b9719d911017c592'
# Open,close, read file and calculate MD5 on its contents
with open(file_name, 'rb') as file_to_check:
# read contents of the file
data = file_to_check.read()
# pipe contents of the file through
md5_returned = hashlib.md5(data).hexdigest()
# Finally compare original MD5 with freshly calculated
if original_md5 == md5_returned:
print "MD5 verified."
else:
print "MD5 verification failed!."
投稿をご覧ください Pythonの ファイルのMD5チェックサムを生成する . 効率的に実現する方法をいくつか詳しく説明しています。
幸運を祈ります。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] JavaでMD5ハッシュを生成するにはどうすればよいですか?
-
[解決済み] ファイルのMD5チェックサムを計算する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] 2つの弦をインターリーブさせる最もピトニックな方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ファイルのMD5チェックサムを生成する
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Pythonでnumpy.linalg.eigを使用した後の固有値と関連する固有ベクトルのソート
-
[解決済み] Google App EngineのためのFlaskとwebapp2の比較
-
[解決済み] Pythonで関数の引数として辞書の項目を渡すには?重複
-
[解決済み] python BeautifulSoup テーブルのパース
-
[解決済み] SQLAlchemy が db に送る SQL コマンドのデバッグ(表示)
-
[解決済み] Python のモック patch.object を使って、他のメソッド内で呼び出されたメソッドの戻り値を変更する。