password_hash password_verify加密、验证原理

PHP5.5之后新加了两个密码相关的函数:password_hash(加密)和password_verify(验证)。 string password_hash ( string $password , integer $algo [, array $options ] ),password_hash接收两个必需参数(明文密码和加密算法),一个可选的数组,返回一个字符串;password_verify接收两个必需参数(明文密码和加密后的密码),返回Bool,这个函数每次生成的加密后的hash值都不同,但是password_verify照样能验证,感到很疑惑,后来查阅资料,看到函数的加密原理。 加密后的字符串实际上是有四部分组成,如下图: password_hash 实际上salt是自动生成的,每次的salt不一样,所以加密后的hash必然不同。 参考链接:http://tech.cv6.me/469/php/new-generation-php-crypt-solution-password_hash.html