Laravel使用bcrypt
来对密码进行哈希。
根据这篇文章,Hash::make
函数在过程中某个时刻创建并使用一个22位长度的随机字符串作为盐值生成密码。
对于单个不同的密码,Hash::make
确实会返回唯一的哈希值,暗示着它确实在某个过程中使用了某种形式的盐值。
但是,这些盐值并没有存储在用户表中,我本来期望它们会在那里被存储。Laravel如何知道要使用哪个哈希值来验证密码?
你提供的链接中的文章似乎包含了答案。 https://mnshankar.wordpress.com/2014/03/29/laravel-hash-make-explained/
这种算法的巧妙之处在于,算法、盐和成本被嵌入到哈希值中,因此可以轻松地解析为单独的组件进行重构/验证(请参见php crypt源代码的相关部分 https://github.com/php/php-src/blob/master/ext/standard/crypt.c#L258)。 因此,您无需将盐/成本分别存储在数据库表中。