14.3. "md5" --- MD5 メッセージダイジェストアルゴリズム
******************************************************

バージョン 2.5 で非推奨: 代わりにモジュール "hashlib" を使ってください
。

このモジュールは RSA 社の MD5 メッセージダイジェストアルゴリズムへのイ
ンタフェースを実装しています。 (Internet **RFC 1321** も参照してくださ
い ) 。利用方法は極めて単純です。まず md5 オブジェクトを "new()" を使
って生成します。後は "update()" メソッドを使って、生成されたオブジェク
トに任意の文字列データを入力します。オブジェクトに入力された文字列デー
タ全体の *digest* ("fingerprint" として知られる強力な 128-bit チェック
サム ) は "digest()" を使っていつでも調べることができます。

たとえば、 "'Nobody inspects the spammish repetition'" というバイト文
字列のダイジェストを取得するには次のようにします:

>>> import md5
>>> m = md5.new()
>>> 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'

もっと簡潔に書くと、このようになります:

>>> md5.new("Nobody inspects the spammish repetition").digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'

以下の値はモジュールの中で定数として与えられており、 "new()" で返され
る md5 オブジェクトの属性としても与えられます :

md5.digest_size

   返されるダイジェスト値のバイト数で表した長さ。常に "16" です。

md5 クラスオブジェクトは以下のメソッドをサポートします :

md5.new([arg])

   新たな md5 オブジェクトを返します。もし *arg* が存在するなら、
   "update(arg)" を呼び出します。

md5.md5([arg])

   下位互換性のために、 "new()" の別名として提供されています。

md5 オブジェクトは以下のメソッドをサポートします :

md5.update(arg)

   文字列 *arg* を入力として md5 オブジェクトを更新します。このメソッ
   ドを繰り返して呼び出す操作は、それぞれの呼び出し時の引数 *arg* を結
   合したデータを引数として一回の呼び出す操作と同等になります : つまり
   、 "m.update(a); m.update(b)" は "m.update(a+b)" と同等です。

md5.digest()

   これまで "update()" で与えてきた文字列入力のダイジェストを返します
   。返り値は 16 バイトの文字列で、 null バイトを含む非 ASCII 文字が入
   っているかもしれません。

md5.hexdigest()

   "digest()" に似ていますが、ダイジェストは長さ 32 の文字列になり、
   16 進表記文字しか含みません。この文字列は電子メールやその他のバイナ
   リを受け付けない環境でダイジェストを安全にやりとりするために使うこ
   とができます。

md5.copy()

   md5 オブジェクトのコピー (" クローン ") を返します。冒頭の部分文字
   列が共通な複数の文字列のダイジェストを効率よく計算する際に使うこと
   ができます。

参考:

  Module "sha"
     Secure Hash Algorithm (SHA) を実装した類似のモジュール。 SHA アル
     ゴリズムはより安全なハッシュアルゴリズムだと考えられています。
