>  기사  >  백엔드 개발  >  데이터베이스의 솔트 해시에 대해 사용자 비밀번호를 확인하는 방법은 무엇입니까?

데이터베이스의 솔트 해시에 대해 사용자 비밀번호를 확인하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-13 10:00:04791검색

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'];
?>

이 코드는 데이터베이스에 연결하고, 사용자 입력을 삭제하고, 사용자 테이블에서 지정된 사용자 이름과 관련된 솔트를 검색합니다. . 솔트는 비밀번호 확인에 필수적입니다.

사용자 비밀번호 확인:

솔트된 비밀번호 해시가 검색되면 사용자가 제공한 비밀번호가 일치하는지 확인할 수 있습니다. 그것. 다음 코드는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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.