私は最近、パスワードを不適切に保存していたという発見につながった会話をしました。私は常に md5 を使用しており、十分に安全だと考えていました。ただし、私が発見したいくつかの読書の後、そうではないため、bcryptに切り替えています
とにかく、ログイン プロセッサを作成していますが、ユーザーが入力したパスワードを既知のソルトで暗号化すると、パスワードが等しくないことが示されますが、エコーすると同一です。
コードは次のとおりです。
$username = $_POST['username'];
$password = $_POST['password'];
/*find that username in the database and grab their info*/
$check_username = "SELECT * FROM users WHERE username = ?";
$query_username = $conn->prepare($check_username);
$query_username->execute(array($username));
$count = $query_username->rowCount();
if($count > 0)/*if the user was found in the database*/
{
while($row = $query_username->fetch())
{
$salt = $row['salt'];
$password_encrypted = $row['password'];
$encrypt_password = crypt($password, $salt);
if ($encrypt_password == $row['password'])
{
echo "success";
}
else
{
var_dump($encrypt_password);
echo "<br />";
var_dump($row['password']);
}
}
}
この if ステートメントが失敗する理由がわかりません。前もって感謝します。
vardump の出力:
string(60) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee"
string(61) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee"
エラーが見つかりました。列の文字列を 60 に変更して問題を解決したため、バイナリを使用しています。vardump の使用に関するアドバイスをありがとう