Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでファイルのハッシュ値を計算する方法【hashlib活用ガイド】

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

ファイルサイズは非常に大きくなる場合があるため、ファイル全体を一括でメモリに読み込むのは避けたほうがよいでしょう。バッファ(buffer)を使ってデータを小さなチャンク(塊)単位で読み込みながら処理することで、メモリを節約しつつ効率的にハッシュ値を計算できます。バッファサイズは任意の値を指定可能です。

コード例

以下の例では、32KBずつファイルを読み込みながら、MD5とSHA1の2種類のハッシュ値を同時に計算しています。

import sys
import hashlib

BUF_SIZE = 32768  # 32KBずつファイルを読み込む
md5 = hashlib.md5()
sha1 = hashlib.sha1()

with open('program.cpp', 'rb') as f:
    while True:
        data = f.read(BUF_SIZE)
        if not data:
            break
        md5.update(data)
        sha1.update(data)

print("MD5: {0}".format(md5.hexdigest()))
print("SHA1: {0}".format(sha1.hexdigest()))

処理の流れ

  • open('program.cpp', 'rb'):ファイルをバイナリ読み込みモード('rb')で開きます。テキストモードではなくバイナリモードを使うのがポイントです。
  • f.read(BUF_SIZE):指定したサイズ(ここでは32KB)ずつデータを読み込みます。
  • update(data):読み込んだチャンクをハッシュオブジェクトに順次渡します。複数回呼び出しても、全体をつなげたデータに対するハッシュが計算されます。
  • hexdigest():最終的なハッシュ値を16進数の文字列として取得します。

出力結果

このプログラムを実行すると、以下のような出力が得られます。

MD5: 7481a578b20afc6979148a6a5f5b408d
SHA1: f7187ed8b258baffcbff2907dbe284f8f3f8d8c6

補足:より安全なアルゴリズムを選ぼう

MD5やSHA1は高速ですが、現在では暗号学的な安全性の面で脆弱性が指摘されています。セキュリティ目的(改ざん検知など)で使用する場合は、より強度の高い hashlib.sha256()hashlib.sha3_256() の利用を検討しましょう。使い方は上記のコードとまったく同じで、ハッシュオブジェクトを作成する行を置き換えるだけで対応できます。

  1. Pythonのscikit-learnを使って画像の輪郭を検出する方法

    scikit-learn(通称:sklearn)は、機械学習アルゴリズムを実装するために使用されるPythonのライブラリです。オープンソースとして公開されているため、無料で利用できます。このライブラリは、NumPy・SciPy・Matplotlibという3つのライブラリを基盤として構築されています。画像から輪郭を抽出する際には、「マーチングスクエア法(marching squares)」と呼ばれる手法が用いられます。具体的には、skimageライブラリのmeasureモジュールに含まれる「find_contours」関数を使用します。この関数では、配列内の値が線形補間されるため、出力画像にお

  2. PythonでMD5ハッシュを生成する方法|hashlibモジュールの使い方を徹底解説

    データセキュリティは、あらゆるIT企業にとって最重要課題の一つです。データを保護し、その完全性を検証するために、さまざまなハッシュ技術が活用されています。本記事では、Pythonを使ってMD5ハッシュを生成・エンコードする方法を、具体的なコード例とともにわかりやすく解説します。 ハッシュとは何か ハッシュとは、可変長のバイト列を入力として受け取り、それを固定長のバイト列へと変換する関数のことです。重要な特徴として、元のデータ(入力されたバイト列)を復元することが極めて困難である点が挙げられます。例えば、入力を x、ハッシュ関数を f とした場合、f(x) の計算は高速かつ簡単に行えますが、そこ