盐渍哈希密码与Python(不同的盐为每一个新的密码)(Salted Hashed Password

2019-09-18 04:28发布

至于阅读和研究后,我的理解,使用盐的目的应该是不同的盐用于存储每一个密码。

如果相同的盐用于存储所有的密码,我可以理解如何实现这一点,因为我可以在盐只存储一个恒定的私有变量和使用它。 但是,事实并非如此。

虽然它使存储与新的不同的盐,每一个新的密码非常合情合理的,但我怎么想知道哪个用户的密码关联到盐? 快速解决方案,我认为,是一起存储盐与用户的表属性,也许称为“盐”,但将失去从第一位置太具有盐,如果它太容易从发现盐的目的数据库。

可以在这个人的意见?

注:我使用Python的任建库( hashlib )或Bycrypt( Cryptacular或Passlib )

Answer 1:

快速解决方案,我认为,是一起存储盐与用户的表属性

这正是你做了什么。 知道了盐并没有真正从他们的利益减损:

  • 在你的数据库相同的密码会有不同的哈希值。
  • 彩虹表将无法工作。
  • 试图来匹配您的任何哈希的蛮力攻击将减慢。


Answer 2:

如果你正在使用cryptacular.bcrypt.BCRYPTPasswordManager ,那么你就不需要担心盐。 这需要生成并存储与所述散列盐的照顾。

你可以看到下面的散列字符串是相同的密码不同。 这意味着盐已被使用。

对于例如:

>>> import cryptacular.bcrypt
>>> crypt = cryptacular.bcrypt.BCRYPTPasswordManager()
>>> crypt.encode('aaa')
'$2a$10$B0czYdLVHJG4x0HnEuVX2eF7T9m1UZKynw.gRCrq8S98z84msdxdi'
>>> crypt.encode('aaa')
'$2a$10$Ni7K.pQoal3irbGmREYojOYoi0lye/W0Okz7jqoynRJhW5OCi8Upu'


Answer 3:

无密码的目的只是为了避免简单化的字典攻击。 TMHO在许多应用程序有用于所有的密码只有一个哈希值。

例如,让我们说:神,阳光和爱是常见的密码。 可以有任何攻击者包含这些词词典,有散。

如果不是存储哈希(密码),您存储哈希(密码+盐)(或哈希(盐+密码))可以让这个字典攻击无效的,因为如果你的盐是'DZA $ ^“)与非盟的概率该字典包含 'DZA $ ^“é)àùgod' 趋于0。

在每个输入更改盐可能是也是一个很好的做法(但我觉得不那么常见),但你必须找到如何找回它来检查密码。



文章来源: Salted Hashed Password with Python (Different salt for every new password)