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文字目で逸脱し始め、$salt
25文字で何かが起こっているように見えることです(それが最大長だと仮定しますか?)。これはすべてストック UserCake のものなので、なぜそれほど一貫性がないのかわかりません。
ハッシュ化さ$entered_pass
れたもの(最初のもの)をコピーしてデータベースに貼り付けると、正常にログインできることに注意してください。
編集 >>>
もう少し調べてみると、問題はsha1($salt . $plainText);
. $salt
最初の後に物事が異なり始めるように見えます。また、完全にログインする機能を削除するとsha1()
、セキュリティに大きな影響があるのではないかと思います。