0

UserCake を使用していますが、問題が発生しました。何らかの理由で、generateHash()機能が一貫して機能しなくなりました。これが私が見ているものです:

funcs.php <-- 関数が保持されている場所

function generateHash($plainText, $salt = null) {
    if ($salt === null) {
        $salt = substr(md5(uniqid(rand(), true)), 0, 25);
    } else {
        $salt = substr($salt, 0, 25);
    }

    return $salt . sha1($salt . $plainText);
}

class.newuser.php <-- パスワードを作成するために関数が呼び出される場所

//Construct a secure hash for the plain text password
$secure_pass = generateHash($this->clean_password);

login.php <-- パスワードを比較する関数が呼び出される場所

//Hash the password and use the salt from the database to compare the password.
$entered_pass = generateHash($password,$userdetails["password"]);

if($entered_pass != $userdetails["password"]) {
    $errors[] = lang("ACCOUNT_USER_OR_PASS_INVALID");
} else {
    //Passwords match! we're good to go'
}

新しいアカウントを正常に作成できます。しかし、ログインしようとすると、login.php によって作成されたハッシュ パスワードは、新しいユーザー クラスによって作成されたものとは異なります。たとえば、ログインするとprint_r、入力したハッシュ pw とハッシュ pw の両方をデータベースに配置すると、次のように返されます。

$entered_pass = 62b8ce100193434601929323a13a4d95bd3c6535b014e6444516af13f605f36f7
database pass = 62b8ce100193434601929323a153564aaeb4ad75d57b353ee8918cd9829cb5e1b

私が考えることができる唯一のことは、ハッシュ化されたパスワードが26文字目で逸脱し始め、$salt25文字で何かが起こっているように見えることです(それが最大長だと仮定しますか?)。これはすべてストック UserCake のものなので、なぜそれほど一貫性がないのかわかりません。

ハッシュ化さ$entered_passれたもの(最初のもの)をコピーしてデータベースに貼り付けると、正常にログインできることに注意してください。

編集 >>>

もう少し調べてみると、問題はsha1($salt . $plainText);. $salt最初の後に物事が異なり始めるように見えます。また、完全にログインする機能を削除するとsha1()、セキュリティに大きな影響があるのではないかと思います。

4

1 に答える 1