【问题标题】:Laravel Bcrypt isn't compatible with my programLaravel Bcrypt 与我的程序不兼容
【发布时间】:2017-02-09 20:02:04
【问题描述】:

我目前在网站上使用 Laravel 5,使用默认的 Auth 包。

在使用在线 bcrypt 转换器检查后,我的 Java 程序上有一个通用的 Bcrypt 实现,似乎 Laravel 的 Bcrypt 在某种程度上有所不同,因为我的程序与在线 bcrypt 站点达到相同的结果,而 Laravel 产生不同的结果.

知道这是怎么回事吗?

我的 Java 程序的 Bcrypt 实现使用了这个,但是在线 bcrypt 站点产生了相同的结果,所以问题不在于我的程序,而在于 Laravel 的 Bcrypt。 http://www.mindrot.org/projects/jBCrypt/

【问题讨论】:

  • 您在 Java 程序中使用了多少个日志轮次?
  • @Saumini 我使用的工作系数为 10,afaik 这也是 Laravel 中的默认系数。

标签: php laravel bcrypt


【解决方案1】:

固定。

显然,Laravel 使用 Bcrypt 的最新前缀修改,而其他(公共在线 bcrypt 哈希器,我的应用程序)我们使用有点过时的前缀。

#5@http://blog.ircmaxell.com/2012/12/seven-ways-to-screw-up-bcrypt.html

-

示例

旧的全局 Bcrypt 前缀(在线哈希,我的应用):$2a$

-

最近官方更新的前缀(Laravel):$2y$

【讨论】:

    【解决方案2】:

    Laravel bcrypt() 只是 php 的 password_hash 函数的一个包装器。

    Illuminate/Foundation/helpers.php

    function bcrypt($value, $options = [])
    {
        return app('hash')->make($value, $options);
    } 
    

    BcryptHasher

    public function make($value, array $options = [])
    {
        $cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
    
        $hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => $cost]);
    
        if ($hash === false) {
            throw new RuntimeException('Bcrypt hashing not supported.');
        }
    
        return $hash;
    }
    

    通过哈希生成密码后,laravel 使用password_verify 函数匹配密码

    BcryptHasher

    public function check($value, $hashedValue, array $options = [])
    {
        if (strlen($hashedValue) === 0) {
            return false;
        }
    
        return password_verify($value, $hashedValue);
    }
    

    更多关于laravel password mechanism的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2014-06-09
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多