Cryptography Python的salt哈希密码(每个新密码的salt不同)

Cryptography Python的salt哈希密码(每个新密码的salt不同),cryptography,hash,salt,Cryptography,Hash,Salt,据我阅读和研究后的理解,使用salt的目的应该是为存储的每个密码提供不同的salt 如果使用相同的salt存储所有密码,我可以理解如何实现这一点,因为我可以将salt存储到一个常量私有变量并使用它。但事实并非如此 虽然用新的不同的salt存储每个新密码非常有意义,但是我怎么知道哪个用户的密码与哪个salt关联呢?我想到的快速解决方案是,将盐与用户的表属性(可能称为“salt”)一起存储,但如果从数据库中很容易找到盐,那么也就失去了从第一个位置获取盐的目的 有人能给我一些建议吗 注意:我使用的是P

据我阅读和研究后的理解,使用salt的目的应该是为存储的每个密码提供不同的salt

如果使用相同的salt存储所有密码,我可以理解如何实现这一点,因为我可以将salt存储到一个常量私有变量并使用它。但事实并非如此

虽然用新的不同的salt存储每个新密码非常有意义,但是我怎么知道哪个用户的密码与哪个salt关联呢?我想到的快速解决方案是,将盐与用户的表属性(可能称为“salt”)一起存储,但如果从数据库中很容易找到盐,那么也就失去了从第一个位置获取盐的目的

有人能给我一些建议吗

注意:我使用的是Python内置库()或Bycrypt(或)

我想到的快速解决方案是将盐与用户的表属性一起存储

你就是这么做的。了解盐并不会真正减损它们的好处:

  • 数据库中相同的密码将具有不同的哈希值
  • 彩虹桌子坏了
  • 尝试匹配任何哈希值的暴力攻击将被减慢

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

例如,让我们说:上帝、太阳和爱是共同的密码。任何攻击者都可以拥有包含这些单词的字典,并且有散列

如果不存储散列(密码),而是存储散列(密码+salt)(或散列(salt+密码)),则可以使此字典攻击无效,因为如果您的salt是“dza$^”é)ù”,则字典包含“dza$^”éù上帝”的概率趋于0


在每次输入时更改salt也是一种很好的做法(但我认为不太常见),但您必须找到如何检索它以检查密码。

如果您使用的是
cryptalur.bcrypt.BCRYPTPasswordManager
,那么您就不必担心salt。它负责用散列生成和存储盐

您可以在下面看到,对于相同的密码,哈希字符串是不同的。这意味着使用了一种盐

例如:

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

您好@Aster,感谢您的分享。呃……据我所知,每个新密码都需要不同的密码,原因之一是:1。相同的密码和相同的salt具有相同的散列值,因此黑客/攻击者在设法破解其中一个密码后很容易破解多个密码。不管怎样,我认为你的回答会帮助其他人,他们希望更多地了解使用盐的好处,让更多的人了解这一点。为分享干杯。:)我同意(正如我在帖子中提到的,我的打字错误可能会让它变得不清晰),但我怀疑这在很多应用程序中都是具体实现的(据我所知,大多数CMS如Wordpress和Joomla都没有实现)。啊哈…这太酷了…哈哈…我看到了你的第一篇帖子,没有你最近的3点,我输入了更多的疑问问题,直到你用最近的三点回答了我的疑问。非常感谢您的快速回复!