我对password_hash和password_verify很陌生,它们似乎是安全存储密码的最有效的方式!
我注意到password_hash为相同的plain-text值every time生成不同的哈希!
这意味着,如果用户试图使用密码(thisIsMyPassword)创建一个帐户,它将生成类似于此$2y$10$VCNH8ndve8hwbvLJ2nMHtOsEiigE4zA7ViADxCJfq9bmUCmkNkcce的哈希,
如果另一个或同一个用户尝试使用相同的密码创建另一个帐户,即(thisIsMyPassword),则将创建帐户,密码的哈希值将类似于$2y$10$Hqssc5nn3pzgfwqVwQrQz.Ny71q972RXmCmyV9ykywG8iELbsf47a!
现在您看到了相同的值,即(thisIsMyPassword)导致了不同的散列!
这样可以吗?
只要密码哈希在数据库中不同,允许用户使用相同的密码可以吗?
发布于 2016-10-29 10:37:41
密码哈希包括一个所谓的salt (一个小的随机值),它是为了防止字典攻击,下面是PHP手册中说的:
如果省略,password_hash()将为每个密码哈希生成一个随机盐。这是预期的运作模式。
作为输出,您得到的值实际上不是一个普通的散列,而是一个由-算法id、salt和hash (密码、salt)组成的字符串。
使用的算法、成本和盐分作为散列的一部分返回。因此,将包含验证哈希所需的所有信息。在里面。这允许password_verify()函数在不需要单独存储salt或算法信息的情况下验证哈希。
https://stackoverflow.com/questions/40317276
复制相似问题