ฉันกำลังสร้างแบบฟอร์มลงทะเบียนและลงชื่อเข้าใช้อย่างง่ายโดยใช้ PHP ในการลงทะเบียน ฉันสร้างแฮชโดยใช้ฟังก์ชัน password_hash() แล้วเก็บไว้ในฐานข้อมูล ตอนที่ลงชื่อเข้าใช้ เริ่มแรกสิ่งที่ฉันทำคือสร้างแฮชใหม่โดยใช้ฟังก์ชัน password_hash() อีกครั้ง แล้วเปรียบเทียบกับแฮชรหัสผ่านที่เก็บไว้
สิ่งนี้ล้มเหลวตลอดเวลา เพราะอย่างที่ฉันเข้าใจในตอนนี้ เกลือใหม่จะถูกใช้ทุกครั้งที่คุณสร้างรหัสผ่านแฮชโดยใช้ฟังก์ชัน password_hash() หลังจากการค้นคว้า ฉันรู้ว่าควรใช้ฟังก์ชัน PHP password_verify(<plain_text_password>,<password_fetched_from_DB>)
สิ่งที่ฉันไม่เข้าใจคือทำไมฟังก์ชัน password_verify ถึงรู้ค่าเกลือที่ใช้ก่อนหน้านี้ตอนสมัคร หากไม่รู้จักเกลือ ดังนั้น password_verify ก็ควรล้มเหลวเช่นเดียวกับฟังก์ชัน password_hash เมื่อใช้สำหรับการเปรียบเทียบ
ฉันอ่านเกี่ยวกับเรื่องนี้เพิ่มเติมและสิ่งที่ฉันได้รู้ก็คือ เมื่อใช้ฟังก์ชัน password_hash() เพื่อสร้างแฮช มันจะเก็บค่าเกลือไว้ในแฮชด้วย? ตัวอย่างเช่น หากแฮชที่สร้างขึ้นเป็น abcde12345 ค่าเกลือจะเป็น 12345 ได้หรือไม่
หากเป็นจริง การดูที่แฮชเราสามารถบอกได้ว่าส่วน "นี้" ของแฮชคือค่าเกลือจริงหรือไม่ ค่าเกลืออยู่ที่ตำแหน่งใดตำแหน่งหนึ่งในแฮชเสมอหรือไม่ ฉันจะขอบคุณถ้ามีคนสามารถแบ่งปันตัวอย่าง