ハッシュ値を計算するには、標準ライブラリの 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)
- 48~50行目: 検証に使用した Python では shake_128 が無効化されていたため、コメントになっています。
- 52~54行目: 検証に使用した Python では shake_256 が無効化されていたため、コメントになっています。
環境依存に注意
サンプルコードにあるハッシュ関数が存在することは保証されていません。検証に使用した環境では shake_128 と shake_256 が無効化されていました。ファイルのハッシュ値とは?
ファイルのダウンロードページなどに記載されている、長い文字列です。ファイルが改ざん されていないかチェックする などの用途で使用されます。下図は git for windows のダウンロードページです。 sha256 で計算した、ハッシュ値が記載されています。
サンプルコードを使用して、 「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
検証環境
- Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.906 Experience: Windows Feature Experience Pack 120.2212.551.0