Tôi đang tạo một biểu mẫu Đăng ký và Đăng nhập đơn giản bằng PHP. Khi đăng ký, tôi tạo hàm băm bằng hàm password_hash() rồi lưu trữ trong DB. Tại thời điểm Đăng nhập, ban đầu những gì tôi đã làm là tạo lại một hàm băm mới bằng cách sử dụng hàm password_hash() và sau đó so sánh nó với hàm băm Mật khẩu được lưu trữ.
Điều này luôn thất bại vì theo tôi hiểu bây giờ, một loại muối mới được sử dụng mỗi khi bạn tạo hàm băm mật khẩu bằng hàm password_hash(). Sau khi nghiên cứu, tôi biết rằng một người nên sử dụng hàm PHP password_verify(<plain_text_password>,<password_fetched_from_DB>).
Điều tôi không hiểu là tại sao hàm password_verify lại biết giá trị muối đã được sử dụng trước đó tại thời điểm đăng ký? Nếu muối không được biết thì password_verify cũng sẽ thất bại giống như hàm password_hash khi được sử dụng để so sánh.
Tôi đã đọc thêm về nó và điều tôi biết là khi hàm password_hash() được sử dụng để tạo hàm băm, nó cũng lưu trữ giá trị muối bên trong hàm băm? Chẳng hạn, nếu hàm băm được tạo là abcde12345, thì 12345 có thể là giá trị muối không?
Nếu điều này là đúng, thì bằng cách nhìn vào hàm băm, chúng ta có thể nói rằng phần "này" của hàm băm thực sự là giá trị muối không? Có phải giá trị muối luôn được đặt ở vị trí nhất định trong hàm băm không? Tôi sẽ đánh giá cao nếu ai đó có thể chia sẻ một ví dụ.