我正在开发一个(尝试)超级安全的网站。我读了很多关于密码散列和使用盐的信息,但并非一切都很清楚。我想用salt使用sha-256哈希算法。我知道每个用户每个密码都应该是唯一的盐。
我想知道如果我也使用密码作为盐呢?使用sha256对密码进行哈希处理,然后使用其他算法对其进行哈希处理,并将其用作salt。通过这种方式,我不必将salt存储在数据库中。这可能吗?或者我应该生成随机字符串?
答案 0 :(得分:0)
不,这仍然是一种单向算法。
如果另一个用户使用相同的密码,则哈希值将与第一个用户的传递的哈希值相同。这错过了每个用户和每个传递条目的哈希值必须不同的观点。
我建议使用用户注册日期(例如)作为盐。这种方式对于每个用户和每次传递的散列算法都是不同的(好吧,如果两个用户具有相同的传递和相同的注册日期,它将是相同的。)
或许您可以使用用户ID作为salt,或者用户ID和reg.date以及用户名之间的某种组合。
修改强> 你的方法实际上比没有盐的已知算法的哈希更好,但比哈希+ propper盐差。
您所做的只是应用自己的自定义哈希函数。在不知道自定义算法的情况下,这不容易被暴力强迫,但是可以对其他攻击负责。
我建议不要在数据库中放置一个名为“SALT”的表,因为如果数据库遭到攻击,攻击者将获取密码和盐。