1

我不知道这是 CI 还是 Bonfire 特定的问题,我意识到这不是特定的编程问题,但它肯定会阻碍我在该环境中编码的能力。

Underbonfire/modules/users/controllers/users/是一个控制器,它使用一个名为login(). 我使用该功能和框架功能register()来满足我所有的登录/注册需求,但现在当我必须从头开始登录 Facebook 时,我需要比较 2 个密码。

问题是我无法比较密码,因为它们是由一些添加了盐的时髦怪异散列散列的,我不知道它们使用什么,而且找不到答案!

我的数据库存储哈希值,就像$2a$08$QuJPuhhg.HYh8o7ybGJ1quFe1rvcIo/dRIPJ.iaSbHm5P2qAbPTNy我知道我不应该比较密码一样,但在这种情况下,我需要比较它们,因为我正在登录 Facebook,并且我需要查看具有该 ID 的用户是否已经存在于数据库中。在这种情况下,id 被存储为用户的密码。

那么框架使用什么函数来散列密码呢?

4

1 回答 1

2

CI Bonfire 使用phpass (发音为“pH pass”)框架来散列密码。

当您创建更新用户时,bonfire 使用Auth::hash_password()方法(在后台加载 phpass 框架!)来创建散列密码。

例子

$password = $this->auth->hash_password('password');
$hash = $password['hash'];
$iterations_used = $password['iterations'];

因此,您可以手动使用该方法使用相同的算法对任何字符串进行散列。

Auth库中还有一个check_password()方法可以比较两个参数:输入字符串 ( ) 作为第一个参数,哈希密码 ( ) 作为第二个参数。这可能有助于比较目的。passwordhash

例子

if ($this->auth->check_password('password to check', 'HashedPassword'))
{
    // The passwords match
    ...
}

如果密码和哈希匹配,则返回bool(true),否则返回false

这些方法也记录在Bonfire 用户指南中。

于 2014-08-15T20:44:11.663 回答