読者です 読者をやめる 読者になる 読者になる

md5, sha, hashlib

Python

Python 2.6でmd5とshaモジュールにDeprecationWarningが出るようになって、はじめてhashlibモジュール(Python 2.5から利用可能)の存在に気づいた。

>>> import hashlib
>>> hashlib.md5("spam").hexdigest()
'e09f6a7593f8ae3994ea57e1117f67ec'
>>> hashlib.sha1("spam").hexdigest()
'ded982e702e07bb7b6effafdc353db3fe172c83f'
>>> hashlib.sha256("spam").hexdigest()
'4e388ab32b10dc8dbc7e28144f552830adc74787c1e2c0824032078a79f227fb'
>>> hashlib.sha512("spam").hexdigest()
'3b69dac934519ed342c2a6f201249e22f6b29769c3f2974907036f3934b9527ee3b60a299272695b3bfa56e6cdcd44b4c9a7b3a717ed581195b3120dcb270a64'

Djangoプロジェクト内ならば、django.utils.hashcompatを使うとよい。(Python2.4以前の互換性を考慮するならば。)

>>> from django.utils.hashcompat import md5_constructor
>>> md5_constructor("spam").hexdigest()
'e09f6a7593f8ae3994ea57e1117f67ec'
>>> from django.utils.hashcompat import sha_constructor
>>> sha_constructor("spam").hexdigest()
'ded982e702e07bb7b6effafdc353db3fe172c83f'

【追記】下記のコードの方が賢い。

try:
    from hashlib import md5
except ImportError:
    from md5 import new as md5

digest = md5("spam").hexdigest()