バージョン 2.5 で 新たに追加 された仕様です。
このモジュールは、セキュアハッシュやメッセージダイジェスト用のさまざまな アルゴリズムを実装したものです。FIPSのセキュアなハッシュアルゴリズムであ るSHA1、SHA224、SHA256、SHA384およびSHA512 (FIPS 180-2 で定義されている もの) だけでなくRSAのMD5アルゴリズム (Internet RFC 1321 で定義されてい ます)も実装しています。「セキュアなハッシュ」と「メッセージダイジェスト」 はどちらも同じ意味です。古くからあるアルゴリズムは「メッセージダイジェス ト」と呼ばれていますが、最近は「セキュアハッシュ」という用語が用いられて います。
警告: 中には、ハッシュの衝突の脆弱性をかかえているアルゴリズムもあり ます。最後の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'
もっと簡潔に書くと、このようになります。
>>> 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) |
m.update(a); m.update(b)
とm.update(a+b)
は同じ意味だ
ということです。
) |
) |
) |
参考: