バージョン 2.5 で追加.
このモジュールは、セキュアハッシュやメッセージダイジェスト用のさまざまなアルゴリズムを実装したものです。FIPSのセキュアなハッシュアルゴリズムである SHA1、SHA224、SHA256、SHA384およびSHA512 (FIPS 180-2 で定義されているもの) だけでなくRSAのMD5アルゴリズム (Internet RFC 1321 で定義されています)も実装しています。「セキュアなハッシュ」と「メッセージダイジェスト」はどちらも同じ意味です。 古くからあるアルゴリズムは「メッセージダイジェスト」と呼ばれていますが、最近は「セキュアハッシュ」という用語が用いられています。
ノート
adler32 や crc32 ハッシュ関数が使いたければ、 zlib モジュールにあります。
警告
中には、ハッシュの衝突の脆弱性をかかえているアルゴリズムもあります。最後のFAQをごらんください。
hash のそれぞれの型の名前をとったコンストラクタメソッドがひとつずつあります。 返されるハッシュオブジェクトは、どれも同じシンプルなインターフェイスを持っています。 たとえば sha1() を使用するとSHA1ハッシュオブジェクトが作成されます。 このオブジェクトの update() メソッドに、任意の文字列を渡すことができます。 それまでに渡した文字列の digest を知りたければ、 digest() メソッドあるいは hexdigest() メソッドを使用します。
このモジュールで常に使用できるハッシュアルゴリズムのコンストラクタは md5() 、 sha1() 、 sha224() 、 sha256() 、 sha384() および sha512() です。 それ以外のアルゴリズムが使用できるかどうかは、Python が使用している OpenSSL ライブラリに依存します。
たとえば、 'Nobody inspects the spammish repetition' という文字列のダイジェストを取得するには次のようにします。 :
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
>>> m.digest_size
16
>>> m.block_size
64
もっと簡潔に書くと、このようになります。 :
>>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest()
'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
汎用的なコンストラクタ new() も用意されています。このコンストラクタの最初のパラメータとして、使いたいアルゴリズムの名前を指定します。 アルゴリズム名として指定できるのは、先ほど説明したアルゴリズムかOpenSSLライブラリが提供するアルゴリズムとなります。 しかし、アルゴリズム名のコンストラクタのほうが new() よりずっと高速なので、そちらを使うことをお勧めします。
new() にOpenSSLのアルゴリズムを指定する例です。 :
>>> h = hashlib.new('ripemd160')
>>> h.update("Nobody inspects the spammish repetition")
>>> h.hexdigest()
'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
コンストラクタが返すハッシュオブジェクトには、次のような定数属性が用意されています。
生成されたハッシュのバイト数。
内部で使われるハッシュアルゴリズムのブロックのバイト数。
ハッシュオブジェクトには次のようなメソッドがあります。
ハッシュオブジェクトを文字列 arg で更新します。繰り返してコールするのは、すべての引数を連結して1回だけコールするのと同じ意味になります。つ まり、 m.update(a); m.update(b) と m.update(a+b) は同じ意味だということです。
これまでに update() メソッドに渡した文字列のダイジェストを返しま す。これは digest_size バイトの文字列であり、非ASCII文字やnull バイトを含むこともあります。
ハッシュオブジェクトのコピー (“クローン”) を返します。これは、共通部分を持つ複数の文字列のダイジェストを効率的に計算するために使用します。
参考