プロジェクト

全般

プロフィール

Python ハッシュライブラリ

はじめに

一方向ハッシュを生成するライブラリ hashlib をつかって、いくつかの種類のハッシュアルゴリズムによるハッシュを生成します。

hashlib

MD5

ハッシュ対象データをプログラムから指定

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b'Hello, world')
>>> m.digest()
b'\xbcno\x16\xb8\xa0w\xef_\xbc\x8dY\xd0\xb91\xb9'
>>> m.hexdigest()
'bc6e6f16b8a077ef5fbc8d59d0b931b9'

hashlibのコンストラクタ md5() でMD5ハッシュを生成します。
updateで引数に渡すオブジェクトは bytes-like object (例、bytes, bytearray)です。
updateは同じMD5ハッシュオブジェクトに繰り返し呼ぶと、ハッシュする基のデータにアペンドされていきます。

文字列をそのままではupdateの引数に渡せないので、バイト列に変換します。リテラルで渡す場合は、上述のコード例のように b-文字列リテラル で渡します。文字列変数を渡す場合は、encodeでbyte列にします。

>>> greeting = 'Hello, world'
>>> greeting.encode()
b'Hello, world'

ハッシュ対象データをファイルとして指定

次のファイルのハッシュを生成します。
文字列のハッシュと合わせるために、改行コードは含めていません。

$ hexdump -C greeting.txt 
00000000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64              |Hello, world|
0000000c
>>> md5 = hashlib.md5()
>>> file = open("greeting.txt", "rb")  # ①
>>> data = file.read() # ②
>>> md5.update(data)
>>> md5.hexdigest()
'bc6e6f16b8a077ef5fbc8d59d0b931b9'

  1. ファイルをバイナリモードでopenします
  2. ファイルの内容を読み込みます。バイナリモードでreadすると bytes型で内容を取得します。


約1年前に更新