我是这方面的新手,所以这个问题很可能很简单。我只是不太明白加盐。
无需加盐并使用 sha1,您可以将密码哈希为 sha1('password') 并验证用户,只需比较 sha1_stored ==? sha1(用户输入)。
通过加盐和 sha1,您可以将密码哈希为 sha1('password' + salt),但我不知道如何验证它。
根据我读到的内容,盐总是随机的。因此,如果您 sha1('password' + random_salt1),是否必须将 random_salt 存储在某处,因为当您验证 sha1('password' + random_salt1) == 时? sha1(user_input + random_salt2),你不能保证random_salt1 == random_salt2。或者盐像 site_key (一种随机盐,但整个站点只存储一个盐)?我知道盐如何提高安全性,但我不确定如何正确实现它,以便我可以验证我存储的内容(也不知道这一点)。那么有人可以向我解释一下这一点,并可能给我一个加盐和验证字符串的示例吗?
最佳答案
是的,你必须将随机盐存储在某个地方。
不,您不应该让整个网站都相同,因为它完全违背了加盐的目的。
加盐的目的是提高整个密码列表的安全性。如果您不加盐,并且您的数据库遭到破坏,攻击者就会获取您的所有帐户和密码。如果它们没有加盐,攻击者只需 sha1 一堆单词,并将所有与所有 sha1 密码进行比较。其中一些会与某些密码匹配,然后某些帐户就会被盗用。
通过加盐,攻击者必须独立地操作每个密码,从整个单词词典开始,对它们进行加盐、散列,然后将它们与加盐、散列的密码进行比较。您可以看到,这会降低效率,因为攻击者每次都必须更改盐。通过这种方式,从受损的数据库中获取密码就变得更加困难。
存储盐的一种常见方法是将其附加或添加到哈希值并将其存储在数据库中。由于盐和哈希的长度已知,因此很容易将它们独立地拉出来。
关于security - 对加盐(密码学)感到困惑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7590471/