dbr表示:
def hash_password(password):
"""Returns the hashed version of a string
"""
return hasher.new( str(password) ).hexdigest()
这是一种非常不安全的散列密码方法。你不想这么做。如果您想知道原因,请阅读Bycrypt Paper由为OpenBSD开发密码哈希系统的人撰写。此外,如果想就如何破解密码进行深入讨论,请查看本次采访开膛手杰克(流行的unix密码破解器)的作者。
现在B-Crypt很棒,但我不得不承认,我没有使用这个系统,因为我没有EKS Blowfish算法,也不想自己实现它。我使用的是FreeBSD系统的一个稍微更新的版本,我将在下面发布。要点是这样的。不要只是打乱密码。对密码进行Salt处理,然后对密码进行散列处理,并重复10000次左右。
如果这没有意义的话,下面是代码:
#note I am using the Python Cryptography Toolkit
from Crypto.Hash import SHA256
HASH_REPS = 50000
def __saltedhash(string, salt):
sha256 = SHA256.new()
sha256.update(string)
sha256.update(salt)
for x in xrange(HASH_REPS):
sha256.update(sha256.digest())
if x % 10: sha256.update(salt)
return sha256
def saltedhash_bin(string, salt):
"""returns the hash in binary format"""
return __saltedhash(string, salt).digest()
def saltedhash_hex(string, salt):
"""returns the hash in hex format"""
return __saltedhash(string, salt).hexdigest()
对于部署这样的系统,需要考虑的关键是HASH_REPS常量。这是该系统中的可扩展成本因素。您需要进行测试,以确定您希望等待计算每个哈希的可接受时间,以及密码文件受到基于离线字典的攻击的风险。
安全性很难,我提出的方法不是最好的方法,但它比简单的哈希要好得多。此外,它的实现非常简单。所以,即使你不选择更复杂的解决方案,这也不是最糟糕的。
hope this helps,
Tim