ログインシステムの作成と、パスワードの暗号化に crypt 関数を使用する作業を開始しました。私の問題は、ユーザーとパスワードを使用してユーザーを登録すると、すべてが機能し、ユーザー名のパスワードとソルトがデータベースに保存されることです。登録用のコードは次のとおりです。
注: 現時点では、これはテスト登録ページのみです。
$username=$_POST["username"];
$password=$_POST["password"];
$salt = substr(md5(microtime()),rand(0,26),15);
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="INSERT INTO `users`(`id`, `username`, `password`, `salt`, `Perm_level`) VALUES (NULL,'$username','$hashedPass','$salt','test')";
$result=mysql_query($sql);
それは正しく暗号化されるので、実際の例では、パスワード テストは次のようになります。
そのソルトは次のものです:
d395985a2ca993f
データベースからソルトを取り出して同じ方法で再暗号化しようとしてもログインに行くと、別の暗号化されたパスワードを取得します...ソルトは正しく、パスワードの最初の部分も正しいので、この部分「$2y$10$d395985a2ca993f$$$$$$」
ログイン用のコードは次のとおりです。
$sql="SELECT * FROM `users` WHERE username='$user'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
$salt=$rows['salt'];
}
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="SELECT * FROM `users`WHERE username='$user' AND `password` = '$hashedPass'";
$result=mysql_query($sql);
if($result) {
if(mysql_num_rows($result) == 1) {
echo "Successful Login";
}
}
ログインページのソルトは正しいですが、ハッシュ化後のパスワードは次のとおりです: $2y$10$d395985a2ca993f$$$$$$.ccy3PKl.TsG26FWJBFXKmpQ3wtk4AqC
終止符までの最初の部分は正しいですが、後半だけが異なります
ログオンおよび登録ページでのテストのためだけに abc や 123 のように手動でソルトを設定しようとしましたが、それでも同じエラーが発生します