保存哈希密码 - 安全吗?

时间:2012-04-24 20:34:03

标签: python

这样的Python脚本可以安全使用吗?磁盘上会有一个文件“theFile”:

myPassHash = theFile.read()
enteredPassword = raw_input("Enter your password: ")
enteredHash = hashlib.sha512(enteredPassword)
if myPassHash == enteredHash:
    print "Correct!"
else:
    print "Incorrect!"

5 个答案:

答案 0 :(得分:8)

这看起来很容易受到彩虹表攻击,因为你没有使用密码。

有关盐的更多信息(以及为什么推出自己的身份验证机制是个坏主意),请阅读Eric Lippert's fabulous series密码腌制。

答案 1 :(得分:3)

如果要对密码使用散列算法,您可能也想使用salt。看一下关于盐的这篇文章:http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

答案 2 :(得分:2)

您不应该使用像SHA-2这样的通用哈希算法来存储密码,即使是盐也是如此。盐可以保护您免受彩虹桌的伤害,但它们不会保护您免受暴力攻击。对于任何拥有信用卡的人来说,处理过程很便宜且容易获得,如果您的数据库受到损害,即使是盐,也可以轻易地破解选择不当的密码。

为了存储密码,创建了特定的哈希函数。不同之处在于,它允许您调整加密算法用于生成哈希的循环次数,因此需要花费多少钱,或者需要多长时间。即使可以使用更快的计算机,这也会使暴力攻击变得更加困难。

其中一个是bcrypt,适用于Python here

>>> import bcrypt
>>> h = bcrypt.hashpw('lero', bcrypt.gensalt(10))
>>> j = bcrypt.hashpw('lero', bcrypt.gensalt(12))
>>> h
'$2a$10$FhdV1LfOPfxvHcwbWSZLiupbUL8i.som6GyqWue6VBwVgKK9cZcRi'
>>> j
'$2a$12$bgZ1eFD/VTGWUtA8jhnUcO7JjpIpBRjbNpQ9DcYQvtyQV4XsjAXU6'
>>> 

对bcrypt.gensalt()的调用决定了生成的哈希的复杂程度。如您所见,它们都生成哈希,但使用bcrypt.gensalt(12)的调用需要更长时间。随着计算机变得越来越快,你可以不断增加它并重新生成哈希值,因此暴力攻击不会有效。

答案 3 :(得分:0)

查看类似的内容

http://net.tutsplus.com/tutorials/php/understanding-hash-functions-and-keeping-passwords-safe/

这是PHP,但它也适用。你需要一个盐,至少

答案 4 :(得分:0)

使用passlib,不要编写自己的密码加密/检查代码。