เครื่องมือนี้ทำอะไร
bcrypt เป็นฟังก์ชันแฮชรหัสผ่านที่ออกแบบให้ช้าโดยตั้งใจ ต่างจาก MD5 หรือ SHA-256 ที่คำนวณได้หลายพันล้านครั้งต่อวินาที bcrypt มีค่า cost ที่ปรับได้ ทำให้การเดาแต่ละครั้งมีต้นทุนสูงสำหรับผู้โจมตีที่ขโมยฐานข้อมูลไป ร่วมกับ Argon2 และ scrypt มันยังเป็นหนึ่งในวิธีเก็บรหัสผ่านที่นิยมที่สุด
เครื่องมือนี้ทำได้สองอย่าง:
- สร้างแฮช: แปลงรหัสผ่านเป็นแฮช bcrypt ตามค่า cost และคำนำหน้าเวอร์ชันที่เลือก
- ตรวจสอบ: ตรวจว่ารหัสผ่านตรงกับแฮช bcrypt ที่มีอยู่หรือไม่ เช่น จากฐานข้อมูลหรือไฟล์ seed ของเฟรมเวิร์ก
วิธีใช้
- พิมพ์ รหัสผ่าน หรือคลิก ตัวอย่าง
- ในโหมด สร้างแฮช เลือก Cost และ เวอร์ชัน แฮชจะแสดงทันที คลิก สุ่ม salt ใหม่ เพื่อได้แฮชอื่น
- ในโหมด ตรวจสอบ วาง แฮช bcrypt ที่จะตรวจ ผลลัพธ์จะบอกว่ารหัสผ่านตรงกันหรือไม่
อ่านแฮช bcrypt
แฮชอย่าง $2b$10$./3kakECWB0QfIgYzIqciuv449HNnwGbgExtJQQwQ1MofonthOdoK มีสี่ส่วน: เวอร์ชัน 2b, cost 10 (การตั้งค่าคีย์ 2¹⁰ รอบ), salt 22 ตัวอักษร และ checksum 31 ตัวอักษร ทุกอย่างที่เซิร์ฟเวอร์ต้องใช้ตรวจรหัสผ่านภายหลังอยู่ในสตริงเดียวนี้ คุณจึงเก็บแค่แฮช
ข้อจำกัดที่ควรรู้
bcrypt อ่านเฉพาะ 72 ไบต์แรกของรหัสผ่าน รหัสผ่านที่ยาวกว่านั้น หรือมีอักขระที่ไม่ใช่ ASCII จำนวนมาก (แต่ละตัวใช้ 2–4 ไบต์ใน UTF-8) จะถูกตัดโดยไม่แจ้ง เครื่องมือจะเตือนเมื่อเกิดกรณีนี้ หากต้องรองรับวลีรหัสผ่านที่ยาวมาก ให้แฮชก่อนหนึ่งชั้นหรือพิจารณา Argon2id
คำถามที่พบบ่อย
› ทำไมรหัสผ่านเดียวกันจึงได้แฮชไม่เหมือนกันทุกครั้ง
แต่ละแฮชใช้ salt สุ่มขนาด 16 ไบต์ชุดใหม่ ซึ่งเก็บไว้ในแฮชเอง เป็นความตั้งใจเพื่อไม่ให้รหัสผ่านที่เหมือนกันได้แฮชเหมือนกัน หากต้องการตรวจรหัสผ่าน ให้ใช้โหมดตรวจสอบแทนการเทียบสตริงแฮช
› ควรตั้ง cost เท่าไร
เลือก cost สูงสุดที่เซิร์ฟเวอร์รับไหวในการล็อกอินแต่ละครั้ง ปัจจุบันมักอยู่ที่ 10 ถึง 12 ทุกขั้นที่เพิ่มทำให้งานเพิ่มเป็นสองเท่า ให้วัดบนฮาร์ดแวร์จริง โดยทั่วไปตั้งเป้าราว 100–300 มิลลิวินาทีต่อแฮช
› $2a$, $2b$ และ $2y$ ต่างกันอย่างไร
เป็นอัลกอริทึมเดียวกัน $2b$ คือคำนำหน้าปัจจุบันของ OpenBSD, $2y$ คือสิ่งที่ password_hash ของ PHP เขียน และ $2a$ คือรุ่นเก่า ไลบรารีส่วนใหญ่รับได้ทั้งสามแบบ จึงเลือกแบบที่ระบบของคุณต้องการได้เลย
› รหัสผ่านของฉันถูกส่งไปที่ไหนหรือไม่
ไม่ การแฮชและการตรวจสอบทำงานในเบราว์เซอร์ รหัสผ่านและแฮชที่ตรวจอยู่ในหน่วยความจำของหน้านี้เท่านั้น ไม่ถูกบันทึกและไม่ถูกใส่ในลิงก์แชร์