我在一个超级安全的网站上工作。我读了很多关于密码哈希和使用salt的文章,但并不是所有的东西我都清楚。我想使用sha-256哈希算法和salt。我知道salts,每个用户每个密码都应该是唯一的。
我想知道如果我也把密码当作salt使用会怎么样?用sha256对密码进行散列,然后用其他算法对其进行散列,并将其用作salt。通过这种方式,我不必将盐存储在数据库中。这可能吗?还是应该生成一个随机字符串?
不,这仍然是一个单向算法。
如果另一个用户使用相同的密码,则哈希值将与第一个用户的通行证的哈希值相同。这忽略了一点,即每个用户和每个传递条目的哈希值必须不同。
我建议使用用户的注册日期(例如)作为salt。这样,对于每个用户和每个通行证,哈希算法将是不同的(好吧,如果两个用户有相同的通行证和相同的注册日期,它将是相同的)。
或者,您可以将用户id用于salt,或者将用户id与reg.date和用户名组合使用。
编辑:实际上,您的方法比使用无盐的已知算法进行哈希要好,但比哈希+proper-salt更差。
您所做的只是应用自己的自定义哈希函数。在不了解自定义算法的情况下,这不可能是轻易的暴力行为,但也容易受到其他攻击。
我建议不要在数据库中放置一个名为"SALT"的表,因为如果数据库被黑客入侵,攻击者将获得他们的密码和salts。