0

我们有一些使用相同数据库的应用程序。用户密码由 cakePHP 应用程序散列。我们想做的是比较 php 服务散列的密码和 cakePHP 散列的密码。

是否有一个 PHP 函数可以模仿 CakePHP 的散列来比较密码?如果没有,最简单的方法是什么?

4

1 回答 1

1

我相信 CakePHP 使用hash里面的函数lib\Cake\Utility\Security.php来获取用户的散列数据并将其与存储在密码字段中的散列进行比较:

https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/Security.php#L107

我还要说它通常sha1默认使用 PHP 的函数,该函数使用用户passwordSecurity.salt值(在 core.php 中定义)作为输入字符串。因此,您可以执行以下操作来获取保存在表password字段中的值users

sha1('cce93fda02c7f3ebf1g46c583589f1fd257e9d5d'. 'mypassword');

这是 CakePHP 中的完整函数,它使用sha1

public static function hash($string, $type = null, $salt = false) {
    if (empty($type)) {
        $type = self::$hashType;
    }
    $type = strtolower($type);

    if ($type === 'blowfish') {
        return self::_crypt($string, $salt);
    }
    if ($salt) {
        if (!is_string($salt)) {
            $salt = Configure::read('Security.salt');
        }
        $string = $salt . $string;
    }

    if (!$type || $type === 'sha1') {
        if (function_exists('sha1')) {
            return sha1($string);
        }
        $type = 'sha256';
    }

    if ($type === 'sha256' && function_exists('mhash')) {
        return bin2hex(mhash(MHASH_SHA256, $string));
    }

    if (function_exists('hash')) {
        return hash($type, $string);
    }
    return md5($string);
}

您可以在CakePHP 文档中阅读更多关于它的信息。

于 2013-08-20T09:19:59.210 回答