为什么PHP 手册中的这个示例每次运行时都会给出不同的结果?
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
然后,password_verify() 知道所有这些哈希匹配“rasmuslerdorf”!即使文档清楚地说明,这对我来说就像魔术一样:
请注意,password_hash() 作为返回哈希的一部分返回算法、成本和盐。因此,验证哈希所需的所有信息都包含在其中。这允许验证函数验证哈希,而无需单独存储盐或算法信息。
此功能可安全抵御定时攻击。
echo password_verify ( 'rasmuslerdorf' , '$2y$10$EMawXU7qNS4GzU2Do8bByeb7sSQZxecvmZ6mBrToxsOaY7RMAIGua' ); //=>true
echo password_verify ( 'rasmuslerdorf' , '$2y$10$0vMA2k7LxTBstI/J7clkkuZZ/XtuS1fklVuoM6sl4Fc/aj1avQa5u' ); //=>true
echo password_verify ( 'rasmuslerdorf' , '$2y$10$iuE2EzHMNONAWFKh/4Wyl.dcBxgFaNzAh32va0/gyE4ScqnNr/Uc.' ); //=>true
到底是怎么回事?password_verify() 如何知道一些疯狂的字符串匹配 'rasmuslerdorf' 而黑客却不知道?