×

Tạo và xác thực mã băm (hash) cho mật khẩu trong PHP

Trong lập trình web, bảo mật mật khẩu người dùng là một trong những yếu tố quan trọng nhất. Việc lưu trữ một mật khẩu dưới dạng văn bản rõ ràng là nguy hiểm và dễ dẫn đến lỗ hổng bảo mật. Thay vào đó, chúng ta nên lưu trữ mật khẩu dưới dạng mã băm (hash) để cải thiện độ an toàn. Trong PHP, việc mã hóa và xác thực mật khẩu không chỉ dễ dàng mà còn tuân theo các tiêu chuẩn bảo mật cao. Dưới đây là hướng dẫn chi tiết về cách tạo và xác thực mã băm cho mật khẩu trong PHP.

Tạo mã băm cho mật khẩu

Trong PHP, hàm password_hash() được sử dụng để tạo mã băm cho mật khẩu. Hàm này hỗ trợ nhiều thuật toán băm khác nhau như BCRYPT và ARGON2I. Trong ví dụ sau, chúng ta sẽ sử dụng BCRYPT:

<?php
$password = 'matkhau123';
$hashed_password = password_hash($password, PASSWORD_BCRYPT);

echo $hashed_password;
?>

Hàm password_hash() sẽ tạo ra một chuỗi mã băm độc nhất mỗi lần bạn gọi, ngay cả khi đầu vào giống nhau. Điều này làm tăng cường bảo mật bằng cách ngăn chặn việc dự đoán mã băm.

Xác thực mật khẩu với mã băm

Để xác thực mật khẩu người dùng với mã băm đã lưu trữ, chúng ta sử dụng hàm password_verify(). Hàm này sẽ so sánh mật khẩu nhập vào với mã băm đã lưu:

<?php
// Giả sử mã băm được lấy từ cơ sở dữ liệu
$hashed_password = '$2y$10$Hvh9WhFtHkj7pT3VzstZf.jDKpMJlIpPyerWfM8yznR5zK.Q2ZMMG';

$input_password = 'matkhau123';

if (password_verify($input_password, $hashed_password)) {
    echo 'Xác thực thành công!';
} else {
    echo 'Xác thực thất bại!';
}
?>

Hàm password_verify() sẽ đảm bảo rằng mật khẩu người dùng khớp với mã băm đã lưu trữ một cách an toàn và hiệu quả.

Cập nhật mã băm mật khẩu

Nếu bạn sử dụng khác thuật toán bảo mật, bạn nên kiểm tra và cập nhật mã băm mật khẩu khi cần. Hàm password_needs_rehash() giúp bạn thực hiện điều này:

<?php
$hashed_password = '$2y$10$Hvh9WhFtHkj7pT3VzstZf.jDKpMJlIpPyerWfM8yznR5zK.Q2ZMMG';

$options = ['cost' => 12];

if (password_needs_rehash($hashed_password, PASSWORD_BCRYPT, $options)) {
    $new_hashed_password = password_hash($input_password, PASSWORD_BCRYPT, $options);
    // Lưu lại $new_hashed_password vào cơ sở dữ liệu
}
?>

Kết luận

Bảo mật mật khẩu là một phần không thể thiếu trong việc xây dựng ứng dụng web an toàn. Sử dụng các hàm tích hợp của PHP như `password_hash()`, `password_verify()`, và `password_needs_rehash()` giúp bạn dễ dàng triển khai hệ thống mã hóa mật khẩu an toàn và hiệu quả. Bằng cách áp dụng những phương pháp trên, bạn sẽ giảm thiểu nguy cơ mất mát dữ liệu và bảo vệ thông tin của người dùng một cách tốt nhất.

Comments