我们有一些使用相同数据库的应用程序。用户密码由 cakePHP 应用程序散列。我们想做的是比较 php 服务散列的密码和 cakePHP 散列的密码。
是否有一个 PHP 函数可以模仿 CakePHP 的散列来比较密码?如果没有,最简单的方法是什么?
我们有一些使用相同数据库的应用程序。用户密码由 cakePHP 应用程序散列。我们想做的是比较 php 服务散列的密码和 cakePHP 散列的密码。
是否有一个 PHP 函数可以模仿 CakePHP 的散列来比较密码?如果没有,最简单的方法是什么?
我相信 CakePHP 使用hash
里面的函数lib\Cake\Utility\Security.php
来获取用户的散列数据并将其与存储在密码字段中的散列进行比较:
https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/Security.php#L107
我还要说它通常sha1
默认使用 PHP 的函数,该函数使用用户password
和Security.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 文档中阅读更多关于它的信息。