2012年12月13日木曜日

Djangoで、パスワードの暗号化と復号

Django(1.4.2)で、パスワードの暗号化と復号です。もろ、サンプルのパクリ。暗号化の際、キーになるハッシュ文字列を同時に作り出してくれるのが賢いです。何をやっているのかよくわかっていない部分はあるのですが、エレガントと言ってしまいましょう。

import urllib
import hashlib, zlib
import cPickle as pickle

my_secret = "yama kawa"

# 暗号化
def encode_data(data):
    text = zlib.compress(pickle.dumps(data, 0)).encode('base64').replace('\n', '')
    m = hashlib.md5(my_secret + text).hexdigest()[:12]
    return m, text

# 復号
def decode_data(hash, enc):
    text = urllib.unquote(enc)
    m = hashlib.md5(my_secret + text).hexdigest()[:12]
    if m != hash:
        raise Exception("Bad hash!")
    data = pickle.loads(zlib.decompress(text.decode('base64')))
    return data
使い方は、下記の通り。
hash, enctext = encode_data(['Hello', 'World'])
print hash, enctext
print decode_data(hash, enctext)
参考サイト
How to generate temporary URLs in Django(Stack Overflo)

0 件のコメント:

コメントを投稿