Python - ファイルのハッシュ値を調べる

ハッシュ値を計算するには、標準ライブラリの hashlib を使用します。

ファイルのハッシュ値を調べる方法

ファイルを バイナリーモードで 開き、 ファイル内容を hashlib の各ハッシュ生成関数に渡します。
import hashlib

# ファイル を バイナリーモード で開く
with open('ファイル名', 'rb') as file:
    # ファイルを読み取る
    fileData = file.read()

    # md5
    hash_md5 = hashlib.md5(fileData).hexdigest()
    print('md5      : ' + hash_md5)

    # sha1
    hash_sha1 = hashlib.sha1(fileData).hexdigest()
    print('sha1     : ' + hash_sha1)

    # sha224
    hash_sha224 = hashlib.sha224(fileData).hexdigest()
    print('sha224   : ' + hash_sha224)

    # sha256
    hash_sha256 = hashlib.sha256(fileData).hexdigest()
    print('sha256   : ' + hash_sha256)

    # sha384
    hash_sha384 = hashlib.sha384(fileData).hexdigest()
    print('sha384   : ' + hash_sha384)

    # sha512
    hash_sha512 = hashlib.sha512(fileData).hexdigest()
    print('sha512   : ' + hash_sha512)

    # sha3_224
    hash_sha3_224 = hashlib.sha3_224(fileData).hexdigest()
    print('sha3_224 : ' + hash_sha3_224)

    # sha3_256
    hash_sha3_256 = hashlib.sha3_256(fileData).hexdigest()
    print('sha3_256 : ' + hash_sha3_256)

    # sha3_384 (バージョン 3.6~)
    hash_sha3_384 = hashlib.sha3_384(fileData).hexdigest()
    print('sha3_384 : ' + hash_sha3_384)

    # sha3_512 (バージョン 3.6~)
    hash_sha3_512 = hashlib.sha3_512(fileData).hexdigest()
    print('sha3_512 : ' + hash_sha3_512)

    # # shake_128 (バージョン 3.6~)
    # hash_shake_128 = hashlib.shake_128(fileData).hexdigest()
    # print('shake_128 :' + hash_shake_128)

    # # shake_256 (バージョン 3.6~)
    # hash_shake_256 = hashlib.shake_256(fileData).hexdigest()
    # print('shake_256 :' + hash_shake_256)

    # sha3_224 (バージョン 3.6~)
    hash_sha3_224 = hashlib.sha3_224(fileData).hexdigest()
    print('sha3_224 : ' + hash_sha3_224)

    # sha3_256 (バージョン 3.6~)
    hash_sha3_256 = hashlib.sha3_256(fileData).hexdigest()
    print('sha3_256 : ' + hash_sha3_256)

    # blake2b (バージョン 3.6~)
    hash_blake2b = hashlib.blake2b(fileData).hexdigest()
    print('blake2b  : ' + hash_blake2b)

    # blake2s (バージョン 3.6~)
    hash_blake2s = hashlib.blake2s(fileData).hexdigest()
    print('blake2s  : ' + hash_blake2s)

環境依存に注意

サンプルコードにあるハッシュ関数が存在することは保証されていません。検証に使用した環境では shake_128 と shake_256 が無効化されていました。

ファイルのハッシュ値とは?

ファイルのダウンロードページなどに記載されている、長い文字列です。ファイルが改ざん されていないかチェックする などの用途で使用されます。

下図は git for windows のダウンロードページです。 sha256 で計算した、ハッシュ値が記載されています。 git for windows ファイルのダウンロードページ

サンプルコードを使用して、 「Git-2.31.1-64-bit.exe」のハッシュを計算した結果です。sha256 の値が 一致しています。

サンプル実行結果

$python3 hash.py
md5      : e10b5335284074723a697540df7eae6a
sha1     : 538b338f01e723d4452725b1874164117f98650c
sha224   : 86448f30ed1ebda632efffd4c1a5f7ab8e587253e58233cf279f4d56
sha256   : c43611eb73ad1f17f5c8cc82ae51c3041a2e7279e0197ccf5f739e9129ce426e
sha384   : 83b77c925f4d411f8380b18ae888b87662859edc30b6b23901dd29f02e0e44f6cadea
badb948d2b550d42ecc98ced646
sha512   : a9286d739b1a8e4d87b79f8110687b0153cba739cdfdbabcbd1f3d78e74aefdc9efe0
4d66add25b6f7471c82e2c990495c52bee8c39b02a9fd7a07a8998e6442
sha3_224 : 9e7a4cdfaaed78f14c3daf6bfdfc3b685235d14eb1065cd4b74c20a2
sha3_256 : b4e9d1db2a2bf816b7aed2304421eb6ad37a014ac34346047f13efc1c9648242
sha3_384 : fdc40d57780f306eb8d05871df131010b1309ae60dd724dee3f8b90be7faa3e9c933e
11b622f434cd01b2d584c63c635
sha3_512 : 052c4fb08d091ed3db1f1e443e147e5940d86aff8bda82b3957175f1b93900a8e4487
08686ae71a200d58affa3895d3ae547639138dd2c135189980a3d980d37
sha3_224 : 9e7a4cdfaaed78f14c3daf6bfdfc3b685235d14eb1065cd4b74c20a2
sha3_256 : b4e9d1db2a2bf816b7aed2304421eb6ad37a014ac34346047f13efc1c9648242
blake2b  : 07f01601fa776e3dc55c593737f26413e7e975c76e9d98ba5f2b1474a20584cc25899
1231a97d3e6fa9cc928f253bee53a715c022d190d6c9aabde6589f616d8
blake2s  : f9ee1812b85a12fc28a3930fb522205a9bb243cbe0b014b552a2de004faad45e

検証環境

関連ページ