ホームページ >バックエンド開発 >PHPチュートリアル >ユーザーのパスワードをデータベース内のソルトされたハッシュと照合して検証するにはどうすればよいですか?

ユーザーのパスワードをデータベース内のソルトされたハッシュと照合して検証するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-13 10:00:04850ブラウズ

How to Verify a User Password Against a Salted Hash in a Database?

パスワードがデータベースに保存されているソルトされたパスワードと一致するかどうかを確認する方法

安全なアプリケーションを構築する場合、ソルトされたパスワードを処理することが重要です。ただし、保存されているソルト付きハッシュに対してユーザーのパスワードを効果的に検証するのは困難な場合があります。この記事では、データベースからソルトされたパスワードを取得し、ユーザーを認証する手順について説明します。

ソルトされたパスワードの取得:

以下のコード例は、次のことを示しています。 mysqli 接続を使用して MySQL データベースからソルト付きパスワード ハッシュを取得する方法:

<?php
$servername = 'localhost';
$username = 'root';
$pwd = '';
$dbname = 'lp001';

$connect = new mysqli($servername,$username,$pwd,$dbname);

if ($connect->connect_error){
    die('connection failed, reason: '.$connect->connect_error);
}

$name = mysqli_real_escape_string($connect, $_POST['name']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false){
    die(mysqli_error());
}

$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
?>

このコードはデータベースに接続し、ユーザー入力をサニタイズし、指定されたユーザー名に関連付けられたソルトを users テーブルから取得します。 。ソルトはパスワードの検証に不可欠です。

ユーザー パスワードの検証:

ソルト付きパスワード ハッシュが取得されたら、ユーザーが指定したパスワードが一致するかどうかを検証できます。それ。次のコードは、password_hash() 関数とpassword_verify() 関数を使用してこれを行う方法を示しています。

<?php
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltedPW = $password.$salt;
$hashedPW = hash('sha256', $saltedPW);

$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";

if (mysqli_query($connect, $sqlQuery)){
    echo '<h1>Welcome to the member site '.$name.'</h1>';
}else{
    echo 'error adding the query: '.$sql_q.'<br> Reason: '.mysqli_error($connect);
}
?>

ここでは、提供されたパスワードは、取得したソルトを使用してソルト処理され、安全なハッシュ関数を使用してハッシュされます。次に、ハッシュ化されたパスワードが、データベースに保存されているハッシュ化されたパスワードと比較されます。パスワードが一致する場合、ユーザーは認証されます。

これらの手順に従うことで、データベースからソルトされたパスワードを効果的に取得し、実際のパスワードを公開することなくユーザーのパスワードを検証できます。このアプローチにより、効率的で安全な認証を提供しながら、ユーザー資格情報のセキュリティが確保されます。

以上がユーザーのパスワードをデータベース内のソルトされたハッシュと照合して検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。