Encryption 为什么要';我是否使用加密salt我输入自己并使用一个函数为我随机化salt?

Encryption 为什么要';我是否使用加密salt我输入自己并使用一个函数为我随机化salt?,encryption,salt,sha,crypt,sha512,Encryption,Salt,Sha,Crypt,Sha512,我只是在php文档中键入一个salt,人们总是使用一些随机变量函数。键入salt而不是生成salt的缺点是什么? 为什么要强迫用户键入内容 随机生成的字节将比用户输入的熵大得多(通常只有字母数字ASCII) 盐的作用是给散列增加熵。 密码散列的设计使得对输入的微小更改会在结果散列中产生巨大的差异,因此(除非算法中存在缺陷),通过检查两个不同盐渍散列之间的相似性,无法知道原始输入是否相同 但是,如果你对每个人都使用相同的盐,你就会失去提供的许多好处两个相同的密码用相同的盐进行散列,将得到相同的散列

我只是在php文档中键入一个salt,人们总是使用一些随机变量函数。键入salt而不是生成salt的缺点是什么?

  • 为什么要强迫用户键入内容

  • 随机生成的字节将比用户输入的熵大得多(通常只有字母数字ASCII)


盐的作用是给散列增加熵。 密码散列的设计使得对输入的微小更改会在结果散列中产生巨大的差异,因此(除非算法中存在缺陷),通过检查两个不同盐渍散列之间的相似性,无法知道原始输入是否相同

但是,如果你对每个人都使用相同的盐,你就会失去提供的许多好处两个相同的密码用相同的盐进行散列,将得到相同的散列。

  • 如果你对每个人都使用相同的密码,那么至少有人会发现两个用户拥有相同的密码

  • 更重要的是,它大大减少了破解密码的时间,因为他们现在可以同时对每个用户检查相同的哈希

  • 最坏的情况是,可能有人已经有了你使用的盐的查找表,这使得破解每个用户的密码变得微不足道


虽然可以使用简单的salt(如用户ID)来实现更难破解的目标,但使用随机字符串只需稍微多做一点努力,就可以使破解更加困难(由于salt几乎不可能提前预测,因此预先计算该salt的查找表的可能性会大大降低)。

salt只是增加了唯一性。按顺序递增的salt理论上就足够了。(虽然在某些情况下可能不合适,所以我不建议这样做)如果你想为系统中的每个用户键入一个全局唯一的值,那么就使用它。否则就使用加密prng。两个用户用相同的盐散列相同的密码有什么问题吗?你能再解释一下吗?@Uğur:如果盐是相同的,并且我知道用户1的密码是“foo”,散列是“a9935f82b2b3dd92883744924714”或者不管怎样,用户2的密码散列是“a9935f82b3dd92883744924714”,我知道我可以使用密码“foo”以用户2的身份登录。但是你仍然不知道密码,所以这是一种安全,嗯?@Uğur:“一种安全”不安全。这不仅仅是为了保护对您的小网站的访问;如果有人可以访问您的数据库,他们可以将自己设置为管理员,而不必担心密码。但您不希望您的网站成为某个混蛋从中找出您用户网上银行密码的网站(因为你的用户和大多数人一样,在任何地方都使用相同的密码)。这让我把数据库密码改成了长文本。