password_verify如何在不知道盐和成本的情况下验证密码?

Mar*_*lla 9 php passwords hash

新PHP密码API中的函数password_verify()检查密码是否与哈希对应.哈希是由password_hash()生成的,默认情况下使用随机盐和a cost = 10.

我一直认为(虽然我从未研究过它)你必须将盐存储在数据库中,然后当你想验证密码时,使用相同的成本用给定的盐哈希.如何password_verify()在不知道盐和费用的情况下检查密码?

Nie*_* B. 9

返回的字符串password_hash()不仅包含哈希值,还包含算法,成本和盐.

  • 是的,希望PHP开发人员最终能让`md5()`退休. (3认同)
  • @LucasMalor - 但是,将所有必要的参数包含在一个输出字符串中正是`crypt()`很久以前所做的.对于你的另一个问题:盐即使在攻击者知道的情况下也能实现其目的.如果每个密码的盐是唯一的,那么攻击者就必须为每个密码构建一个rainbowtable,并且无法构建一个rainbowtable来同时获取所有密码.也许你想看看我关于[存储密码]的教程(http://www.martinstoeckli.ch/hash/en/index.php). (3认同)
  • 盐和成本的关键不是增加攻击者需要窃取的数据量,而是减缓他的暴力行为.Salts强制您一次只强制一个用户的密码,因为每个用户都有不同的盐.成本控制每次尝试所花费的时间.成本是使暴力变得不切实际的绝佳方式. (2认同)