正在使用带有salt安全的sha1()


is using sha1() with a salt secure?

我知道sha1()是不安全的,但我客户的网站使用这样的东西来散列密码:

$salt = '123abckkk';
$hash = sha1($salt.$password);

现在我猜,如果有人闯入数据库并窃取了哈希,那么他们将无法破解它们,因为没有一个哈希来自普通单词,因为它们混淆了"123abckkk"。

不确定它是否是这样工作的,但如果这不是一个安全的方法,请告诉我为什么。

  1. 您不应该使用md5sha1来散列密码,而应该使用password_hash

    • 哈希密码不是为了你的安全。这是为了用户的安全。我们假设攻击者对您的数据库进行了转储,并且需要很长时间才能将哈希转换为密码。哈希函数花费的时间越长,攻击者破解这些密码的时间就越长。延迟它们的时间可以用来警告用户,并告诉他们在不同的网络上更改密码。

  2. 哈希应该是唯一的,而不是像123abckkk这样的集合字符串。

    • 如果两个密码相同,它们将具有相同的哈希。如果一个密码被破解,其他使用相同密码的人也会被破解。这也可以防止生成任何彩虹表。(请参见https://en.wikipedia.org/wiki/Rainbow_table#Defense_against_rainbow_tables)