ฟังก์ชันpassword_hash()ใช้เพื่อสร้างแฮชของรหัสผ่าน
ข้อกำหนดเวอร์ชัน PHP: PHP 5 >= 5.5.0, PHP 7
สตริงpassword_hash ( สตริง $password , int $algo [, อาร์เรย์ $options ] )
password_hash() สร้างแฮชของรหัสผ่านโดยใช้อัลกอริธึมการแฮชทางเดียวที่แข็งแกร่งเพียงพอ password_hash() เข้ากันได้กับ crypt() ดังนั้นแฮชรหัสผ่านที่สร้างโดย crypt() ก็สามารถใช้ร่วมกับpassword_hash() ได้เช่นกัน
อัลกอริธึมที่รองรับในปัจจุบัน:
PASSWORD_DEFAULT
- ใช้อัลกอริธึม bcrypt (ค่าเริ่มต้นใน PHP 5.5.0) โปรดทราบว่าค่าคงที่นี้จะเปลี่ยนแปลงเมื่อ PHP เพิ่มอัลกอริธึมที่ใหม่กว่าและมีประสิทธิภาพยิ่งขึ้น ดังนั้นความยาวของผลลัพธ์ที่สร้างโดยใช้ค่าคงที่นี้จะเปลี่ยนแปลงในอนาคต ดังนั้น คอลัมน์ในฐานข้อมูลที่เก็บผลลัพธ์สามารถยาวเกิน 60 อักขระ (ควรมีความยาว 255 อักขระ)
PASSWORD_BCRYPT
- สร้างแฮชโดยใช้อัลกอริทึม CRYPT_BLOWFISH
ผลลัพธ์ที่ได้คือ crypt() เข้ากันได้กับ "$2y$" ผลลัพธ์จะเป็นสตริง 60 อักขระ หรือ FALSE
หากล้มเหลว
PASSWORD_ARGON2I
- สร้างแฮชโดยใช้อัลกอริทึมการแฮช Argon2
ตัวเลือกที่ PASSWORD_BCRYPT รองรับ:
salt(string) - ระบุค่าเกลือสำหรับการแฮชรหัสผ่านด้วยตนเอง วิธีนี้จะหลีกเลี่ยงไม่ให้เกิดเกลืออัตโนมัติ
เมื่อละค่านี้ไว้password_hash() จะสร้างค่าเกลือแบบสุ่มสำหรับแฮชรหัสผ่านแต่ละรายการโดยอัตโนมัติ โหมดการทำงานนี้เป็นไปโดยเจตนา
หมายเหตุ: ตัวเลือก Salt เลิกใช้แล้วโดยเริ่มด้วย PHP 7.0.0 ในตอนนี้ ควรใช้เกลือที่สร้างขึ้นตามค่าเริ่มต้นจะดีกว่า
ราคา (จำนวนเต็ม) - แสดงถึงต้นทุนที่ใช้โดยอัลกอริทึม มีตัวอย่างมูลค่าต้นทุนอยู่ที่หน้า crypt()
เมื่อละเว้น ค่าเริ่มต้นคือ 10 ค่าใช้จ่ายนี้เป็นผลกำไรที่ดี แต่คุณอาจเพิ่มมูลค่านี้ได้โดยขึ้นอยู่กับฮาร์ดแวร์ของคุณเอง
PASSWORD_ARGON2I ตัวเลือกที่รองรับ:
memory_cost ( จำนวนเต็ม ) - หน่วยความจำสูงสุด (หน่วย: ไบต์) เมื่อคำนวณแฮช Argon2 ค่าเริ่มต้น: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
time_cost ( จำนวนเต็ม ) – เวลาสูงสุดที่ใช้ในการคำนวณแฮช Argon2 ค่าเริ่มต้น: PASSWORD_ARGON2_DEFAULT_TIME_COST
เธรด ( จำนวนเต็ม ) – จำนวนเธรดสูงสุดที่จะใช้เมื่อคำนวณแฮช Argon2 ค่าเริ่มต้น: PASSWORD_ARGON2_DEFAULT_THREADS
คำอธิบายพารามิเตอร์:
รหัสผ่าน: ค่าแฮชที่สร้างโดยpassword_hash()
algo: ค่าคงที่อัลกอริทึมการเข้ารหัสที่ใช้เพื่อระบุอัลกอริทึมที่ใช้เมื่อแฮชรหัสผ่าน
ตัวเลือก: อาร์เรย์ที่เชื่อมโยงที่มีตัวเลือก ปัจจุบัน รองรับสองตัวเลือก ได้แก่ Salt, Salt (สตริงการรบกวน) ที่เพิ่มเมื่อแฮชรหัสผ่าน และต้นทุน ซึ่งใช้เพื่อระบุจำนวนระดับของการเรียกซ้ำของอัลกอริทึม ตัวอย่างของค่าทั้งสองนี้สามารถดูได้ที่หน้า crypt()
เมื่อละเว้น ระบบจะใช้ค่าเกลือแบบสุ่มและต้นทุนเริ่มต้น
ส่งคืนรหัสผ่านที่แฮชหรือ FALSE เมื่อล้มเหลว
ผลลัพธ์คือ:
$2y$10$.vGA1O9wmRjrwaAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
ผลลัพธ์คือ:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
ตัวอย่างการตั้งค่าเกลือด้วยตนเอง
<?php /* * * โปรดทราบว่าค่าเกลือที่นี่สร้างขึ้นแบบสุ่ม * ห้ามใช้ค่าเกลือคงที่หรือค่าเกลือที่ไม่ได้สร้างขึ้นแบบสุ่ม * * ในกรณีส่วนใหญ่ คุณสามารถปล่อยให้รหัสผ่าน_แฮชสร้างค่าเกลือแบบสุ่มให้คุณโดยอัตโนมัติ */ $ตัวเลือก = [ ' ราคา ' => 11 , ' เกลือ ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; password_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $ options ) ;ผลลัพธ์คือ:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
ตัวอย่าง Password_hash() เพื่อค้นหาต้นทุนที่ดีที่สุด
<?php /* * * ตัวอย่างนี้ทำการทดสอบเกณฑ์มาตรฐานบนเซิร์ฟเวอร์เพื่อทดสอบว่าเซิร์ฟเวอร์สามารถรองรับต้นทุนได้สูงเพียงใด * สามารถตั้งค่าสูงสุดได้โดยไม่ทำให้เซิร์ฟเวอร์ช้าลงอย่างมาก * 8-10 ถือเป็นกำไรที่ดีในเซิร์ฟเวอร์หาก มันเร็วพอ ยิ่งสูงยิ่งดี * เป้าหมายโค้ดต่อไปนี้คือ ≤ 50 มิลลิวินาที (มิลลิวินาที) * เหมาะสำหรับระบบในการจัดการการเข้าสู่ระบบแบบโต้ตอบ - $timeTarget = 0.05 ; // 50 มิลลิวินาที (มิลลิวินาที) $ ต้นทุน = 8 ; - $ cost ++ ; $ start = microtime ( จริง ) ; $ end = microtime ( จริง ) ;ในขณะที่ ( ( $end - $start ) < $ timeTarget ) ; " พบต้นทุนที่เหมาะสม: " . $cost ? >ผลลัพธ์คือ:
พบต้นทุนที่เหมาะสม: 10
ตัวอย่างการใช้ Argon2:
<?php เสียงสะท้อน ' แฮ ช Argon2 : ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ;ผลลัพธ์คือ:
แฮช Argon2: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0