总访问量: AmazingCounters.com

python密码处理(可用于生产模式)

  

import os
from hashlib import sha256
from hmac import HMAC

def encrypt_password(password, salt=None):
    """Hash password on the fly."""
    if salt is None:
        salt = os.urandom(8) # 64 bits.

    assert 8 == len(salt)
    assert isinstance(salt, str)

    if isinstance(password, unicode):
        password = password.encode('UTF-8')

    assert isinstance(password, str)

    result = password
    for i in xrange(10):
        result = HMAC(result, salt, sha256).digest()

    return salt + result

 

这里先随机生成 64 bits 的 salt,再选择 SHA-256 算法使用 HMAC 对密码和 salt 进行 10 次叠代混淆,最后将 salt 和 hash 结果一起返回。

使用的方法很简单:

hashed = encrypt_password('secret password')

 

下面是验证函数,它直接使用 encrypt_password 来对密码进行相同的单向转换并比较

def validate_password(hashed, input_password):
    return hashed == encrypt_password(input_password, salt=hashed[:8])

assert validate_password(hashed, 'secret password')

测试密码代码项目s21

 

posted @ 2015-10-13 10:46  三秋  阅读(415)  评论(0编辑  收藏  举报
总访问量: AmazingCounters.com