1

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

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

5 回答 5

8

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

有关盐的更多信息(以及为什么推出自己的身份验证机制是个坏主意),请阅读Eric Lippert 的关于密码加盐的精彩系列。

于 2012-04-24T20:36:54.430 回答
3

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

于 2012-04-24T20:36:45.717 回答
2

您不应该使用像 SHA-2 这样的通用哈希算法来存储密码,即使使用盐也是如此。盐可以保护你免受彩虹桌的伤害,但它们不会保护你免受暴力攻击。如今,任何拥有信用卡的人都可以轻松地进行处理,如果您的数据库遭到破坏,即使使用盐,也有人可以轻松破解选择不当的密码。

为存储密码而创建了特定的哈希函数。不同之处在于,它允许您调整用于生成散列的加密算法的周期数,因此它的成本有多大,或者需要多长时间。这使得蛮力攻击变得更加困难,即使在更快的计算机可用时也是如此。

其中之一是bcrypt ,可在此处用于 Python :

>>> 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) 的调用需要更长的时间。随着计算机变得越来越快,您可以不时增加它并重新生成哈希,因此暴力攻击将永远不会有效。

于 2012-04-24T21:24:02.250 回答
0

看看这样的东西

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

这是 PHP,但它的应用相同。你至少需要盐

于 2012-04-24T20:37:54.920 回答
0

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

于 2013-03-14T02:04:38.093 回答