👏

【Python】ハッシュ値を確認するプログラム

に公開

📕 概要

Pythonでハッシュ値を確認する方法について紹介

🔣 サンプルコード

import hashlib
import sys

def calculate_file_hash(file_path, hash_algorithm="sha256"):
    """
    指定したファイルのハッシュ値を計算する。
    :param file_path: ハッシュ値を計算するファイルのパス
    :param hash_algorithm: 使用するハッシュアルゴリズム(デフォルト: sha256)
    :return: ハッシュ値の文字列
    """
    try:
        hash_func = hashlib.new(hash_algorithm)
        with open(file_path, "rb") as file:
            while chunk := file.read(8192):  # ファイルをチャンク単位で読み込む
                hash_func.update(chunk)
        return hash_func.hexdigest()
    except FileNotFoundError:
        print(f"ファイルが見つかりません: {file_path}")
        sys.exit(1)
    except ValueError:
        print(f"無効なハッシュアルゴリズム: {hash_algorithm}")
        sys.exit(1)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("使用方法: python gethush.py <ファイルパス> [ハッシュアルゴリズム]")
        sys.exit(1)

    file_path = sys.argv[1]
    hash_algorithm = sys.argv[2] if len(sys.argv) > 2 else "sha256"

    hash_value = calculate_file_hash(file_path, hash_algorithm)
    print(f"ファイル: {file_path}")
    print(f"ハッシュアルゴリズム: {hash_algorithm}")
    print(f"ハッシュ値: {hash_value}")

🧪 実行例

使い方は引数に確認したいファイルのパスを書くだけ。
以下の例は test.txt ハッシュ値を確認し、その後 test.txt に追記を行いハッシュ値が変化していることを確認している。

(.venv) $ touch test.txt
(.venv) $ python gethush.py test.txt 
ファイル: test.txt
ハッシュアルゴリズム: sha256
ハッシュ値: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
(.venv) $ echo "a" > test.txt 
(.venv) $ cat test.txt 
a
(.venv) $ python gethush.py test.txt
ファイル: test.txt
ハッシュアルゴリズム: sha256
ハッシュ値: 87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7

🎯 こんな時に使える

・ファイル改竄の検出(公式のファイルのハッシュ値と現在のファイルのハッシュ値を比較)
・あれ、このファイルってパッチ適用版のやつだっけ・・・。(ハッシュ値を見る。)

🧵 補足

・ハッシュ値は「ファイルの中身(バイト列)」が変化したときだけ変わる。
・更新時間・パーミッション・所有者などが変わっても、ハッシュ値は変わらない。

Discussion