เครื่องมือสร้าง PHP Password Hash: แฮช bcrypt ที่ปลอดภัย ใช้งานง่าย
เรียนรู้วิธีสร้างและตรวจสอบ PHP password hash แบบ bcrypt ที่รองรับการปรับ cost factor เพื่อเสริมความปลอดภัยให้กับระบบ authentication ของคุณ
Table of Contents
การจัดเก็บรหัสผ่านของผู้ใช้เป็นหนึ่งในความรับผิดชอบที่สำคัญที่สุดของนักพัฒนาเว็บแอปพลิเคชัน หากเก็บรหัสผ่านเป็น plain text หรือใช้ hash ที่อ่อนแออย่าง MD5 หรือ SHA-1 เมื่อฐานข้อมูลถูกโจมตี ข้อมูลผู้ใช้ทั้งหมดก็จะรั่วไหลไปในทันที การใช้ hash แบบ bcrypt ผ่านฟังก์ชัน password_hash() และ password_verify() ของ PHP จึงเป็นมาตรฐานที่ควรทำตามเสมอ เพราะ PHP จัดการทั้ง salt generation และการตรวจสอบความปลอดภัยให้อัตโนมัติ
แต่การจะทดสอบ hash ระหว่างพัฒนาโค้ด หรือดูว่าค่า cost factor ที่เลือกเหมาะกับเซิร์ฟเวอร์ของเราหรือไม่ ก็ต้องเขียนโค้ดทดสอบเล็ก ๆ ขึ้นมาทุกครั้ง ซึ่งเสียเวลาไม่น้อย เครื่องมือ PHP Password Hash Generator ของเราจะช่วยแก้ปัญหานี้ ด้วยการให้คุณสร้าง bcrypt hash ที่ใช้ได้จริงในโปรเจกต์ PHP ได้ทันทีผ่านเบราว์เซอร์ พร้อมความสามารถในการตรวจสอบ hash และปรับค่า cost factor ได้อย่างอิสระ
ในบทความนี้ เราจะพาคุณไปรู้จักกับเครื่องมือนี้อย่างละเอียด ตั้งแต่ฟีเจอร์หลัก วิธีใช้งาน ไปจนถึงความเข้าใจเชิงลึกเกี่ยวกับ bcrypt และ cost factor พร้อมตัวอย่างโค้ดจริงที่คุณสามารถนำไปใช้ในระบบ authentication ของตัวเองได้ทันที ไม่ว่าคุณจะเป็นมือใหม่ที่เพิ่งเริ่มเขียน PHP หรือ developer ที่ดูแลระบบเก่าที่ต้องการยกระดับความปลอดภัย
ทำไมต้องใช้ PHP Password Hash Generator?
- ปลอดภัยตามมาตรฐาน bcrypt — เครื่องมือสร้าง hash ด้วยอัลกอริทึม bcrypt ผ่าน PASSWORD_BCRYPT ซึ่งเป็นค่า default ของฟังก์ชัน password_hash() ใน PHP ตั้งแต่เวอร์ชัน 5.5 เป็นต้นมา เหมาะสำหรับการจัดเก็บรหัสผ่านทุกประเภท
- ปรับ cost factor ได้อย่างยืดหยุ่น — คุณสามารถเลือกค่า cost ตั้งแต่ 4–31 เพื่อทดสอบว่าเซิร์ฟเวอร์ของคุณประมวลผลได้เร็วแค่ไหน ก่อนตัดสินใจใช้ค่าใดในโปรดักชัน เรียกได้ว่าเป็นเครื่องมือ benchmark ชั้นดี
- ตรวจสอบ hash ได้ในที่เดียว — นอกจากการสร้าง hash แล้ว ยังสามารถป้อนรหัสผ่านเพื่อตรวจสอบกับ hash ที่มีอยู่ เทียบเท่ากับการทำงานของ password_verify() โดยไม่ต้องเขียนโค้ด
- ได้ผลลัพธ์ตรงกับโค้ดจริง 100% — hash ที่ได้จากเครื่องมือมีรูปแบบเดียวกันกับที่ฟังก์ชัน password_hash() ของ PHP สร้างขึ้น นำไปใช้กับโค้ดจริงได้ทันที ไม่ต้องแปลงรูปแบบใด ๆ
- จัดการ salt ให้อัตโนมัติ — ระบบจะสุ่ม salt ความยาว 22 ตัวอักษรแบบ random ให้ทุกครั้งที่สร้าง hash ทำให้ hash ของรหัสผ่านเดียวกันไม่ซ้ำกัน เพิ่มความปลอดภัยจาก rainbow table attack
- ใช้งานฟรี ไม่ต้องติดตั้ง — ทำงานบนเบราว์เซอร์ ไม่ต้องติดตั้ง PHP หรือ library ใด ๆ ใช้ได้ทั้งนักพัฒนา นักเรียน และทีม QA ที่ต้องการทดสอบระบบ
ฟีเจอร์หลัก
| ฟีเจอร์ | รายละเอียด |
|---|---|
| สร้าง bcrypt hash | แปลงรหัสผ่านเป็น hash รูปแบบ $2y$ ที่รองรับโดย PHP ทุกเวอร์ชัน |
| ตรวจสอบ hash | เปรียบเทียบรหัสผ่านกับ hash ที่มีอยู่เพื่อยืนยันความถูกต้อง |
| ปรับ cost factor | กำหนดค่า cost ได้ตามต้องการตั้งแต่ 4–31 เพื่อสมดุลระหว่างความปลอดภัยและประสิทธิภาพ |
| Salt อัตโนมัติ | สุ่ม salt ใหม่ทุกครั้ง สอดคล้องกับพฤติกรรมของ password_hash() |
| รองรับ PASSWORD_BCRYPT | เป็นไปตามมาตรฐานการใช้งานของ PHP ใช้ได้กับ password_verify() ทันที |
นอกจากตารางฟีเจอร์หลักแล้ว ยังมีจุดเด่นที่ทำให้เครื่องมือนี้ใช้งานได้จริงในขั้นตอนพัฒนา:
- ผลลัพธ์พร้อมนำไปใช้ — hash ที่ได้พร้อมสำหรับการคัดลอกไปวางใน database หรือโค้ดตัวอย่าง password_hash() / password_verify() ที่แสดงให้เห็นการใช้งานที่ถูกต้อง
- อินเทอร์เฟซใช้งานง่าย — ไม่ซับซ้อน ป้อนรหัสผ่าน เลือกค่า cost แล้วกดสร้าง ก็ได้ผลลัพธ์ทันที เหมาะแม้แต่ผู้ที่ไม่ถนัด command line
- ช่วยทดสอบแนวคิด — ใช้เป็นเครื่องมือสอนเรื่อง password security ได้ดี เพราะเห็นผลของ cost factor ต่อความยาวและเวลาประมวลผลของ hash ได้ชัดเจน
วิธีใช้งาน
- เปิดหน้าเครื่องมือ — เข้าไปที่ PHP Password Hash Generator บนเว็บไซต์ของเรา
- ป้อนรหัสผ่าน — พิมพ์รหัสผ่านที่ต้องการแฮชลงในช่อง input เช่น MySecurePass!2026 ระบบจะประมวลผลแบบ real-time
- เลือก cost factor — ปรับค่า cost ตามความต้องการ ค่าเริ่มต้นของ PHP คือ 10 (เวอร์ชัน 8.4 ขึ้นไปใช้ 12) หากเซิร์ฟเวอร์ของคุณแรงพอ แนะนำให้ใช้ 12 เพื่อความปลอดภัยที่สูงขึ้น
- กดปุ่มสร้าง hash — คลิกปุ่ม Generate ระบบจะสร้าง bcrypt hash ที่ขึ้นต้นด้วย $2y$ พร้อม salt แบบสุ่มให้อัตโนมัติ
- คัดลอกผลลัพธ์ไปใช้ — นำ hash ไปใช้กับโค้ดจริงได้เลย เช่น เก็บลงฐานข้อมูล หรือใช้ฟีเจอร์ตรวจสอบเพื่อยืนยันว่ารหัสผ่านตรงกับ hash
ตัวอย่างโค้ดที่คุณสามารถเขียนเองได้ในโปรเจกต์ PHP:
<?php
// สร้าง hash
$hash = password_hash('MySecurePass!2026', PASSWORD_BCRYPT, ['cost' => 12]);
echo $hash; // $2y$12$...
// ตรวจสอบรหัสผ่าน
if (password_verify('MySecurePass!2026', $hash)) {
echo 'รหัสผ่านถูกต้อง';
}
?>
ทำความเข้าใจ bcrypt และ Cost Factor
bcrypt เป็นอัลกอริทึมการแฮชรหัสผ่านที่ออกแบบมาให้ช้าโดยตั้งใจ ต่างจาก MD5 หรือ SHA-1 ที่ถูกออกแบบมาให้เร็วเพื่อใช้กับ checksum การที่ bcrypt ทำงานช้านั้นเป็นข้อดี เพราะหมายถึงผู้โจมตีที่พยายาม brute-force รหัสผ่านจะใช้เวลามหาศาลในการลองเดาแต่ละครั้ง
รูปแบบของ bcrypt hash ที่สร้างโดย PHP จะมีหน้าตาแบบนี้:
$2y$12$iK9mQ8vX3sT5nP2rL7uZ1eYbWcDfGhJkLmNoPqRsTuVwXyZaBCdE
- $2y$ — prefix ที่ PHP ใช้ระบุเวอร์ชันของ bcrypt (โดยเฉพาะรุ่นที่แก้ปัญหาเรื่องการจัดการกับอักขระที่ไม่รองรับในเวอร์ชันเก่า)
- 12 — cost factor หรือจำนวนรอบการประมวลผล ซึ่ง PHP จะนำไปคำนวณเป็น 2^12 รอบ
- 22 ตัวอักษรถัดไป — salt แบบสุ่มที่ระบบสร้างให้อัตโนมัติทุกครั้ง
- ส่วนที่เหลือ — ผลลัพธ์ของ hash ความยาวรวมของ hash ทั้งหมดคือ 60 ตัวอักษร
Cost factor คือตัวเลขที่ควบคุมความสมดุลระหว่างความปลอดภัยกับประสิทธิภาพ ยิ่ง cost สูง ยิ่งใช้เวลาและทรัพยากร CPU มากขึ้น การเลือกค่า cost ที่เหมาะสมขึ้นอยู่กับฮาร์ดแวร์ของเซิร์ฟเวอร์ กฎง่าย ๆ คือ ให้ปรับ cost จนกว่าการแฮชหนึ่งครั้งจะใช้เวลาประมาณ 100–200 มิลลิวินาที ซึ่งถือว่าช้าพอที่จะกันการโจมตี แต่เร็วพอที่ผู้ใช้ไม่รู้สึกถึงความหน่วงตอน login
ข้อควรจำสำคัญ: ฟังก์ชัน password_verify() จะอ่านค่า cost และ salt จาก hash เองโดยอัตโนมัติ ดังนั้นคุณไม่จำเป็นต้องเก็บค่าเหล่านี้แยกไว้ในฐานข้อมูล และไม่ควรสร้าง salt เองเด็ดขาด เพราะ PHP จัดการให้อย่างถูกต้องอยู่แล้ว
กรณีการใช้งานจริง
1. ระบบสมัครสมาชิก (Registration)
เมื่อผู้ใช้สมัครสมาชิก คุณควรนำรหัสผ่านไปแฮชก่อนเก็บลงฐานข้อมูลเสมอ ใช้เครื่องมือนี้สร้าง hash เพื่อทดสอบ หรือเขียนโค้ดตรง ๆ แบบนี้:
<?php
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$stmt = $pdo->prepare('INSERT INTO users (email, password_hash) VALUES (?, ?)');
$stmt->execute([$_POST['email'], $hash]);
?>
2. หน้าเข้าสู่ระบบ (Login)
ในการตรวจสอบ login ให้ดึง hash จากฐานข้อมูลมาเปรียบเทียบกับรหัสผ่านที่ผู้ใช้กรอกด้วย password_verify() ซึ่งรองรับ hash ที่สร้างจากเครื่องมือนี้เต็มรูปแบบ:
<?php
$hash = $pdo->query('SELECT password_hash FROM users WHERE email = ...')->fetchColumn();
if (password_verify($_POST['password'], $hash)) {
// เข้าสู่ระบบสำเร็จ
} else {
// รหัสผ่านไม่ถูกต้อง
}
?>
3. ยกระดับความปลอดภัยของระบบเดิม
หากระบบเก่าของคุณใช้ MD5 หรือ SHA-1 อยู่ วิธีอัปเกรดที่ปลอดภัยคือใช้เทคนิค rehash: ตรวจสอบด้วยฟังก์ชัน password_needs_rehash() เมื่อผู้ใช้ login สำเร็จแล้วค่อยเขียน hash ใหม่ลงฐานข้อมูล โดยไม่ต้องบังคับให้ผู้ใช้เปลี่ยนรหัสผ่าน:
<?php
if (password_verify($password, $oldMd5Hash)) {
$newHash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// อัปเดต hash ใหม่ในฐานข้อมูล
}
?>
4. ทดสอบความแข็งแรงของรหัสผ่าน
ก่อนจะนำระบบขึ้นโปรดักชัน คุณสามารถใช้เครื่องมือนี้ร่วมกับ Password Generator เพื่อทดสอบว่านโยบายรหัสผ่านของคุณให้ผลลัพธ์ที่ปลอดภัยจริงหรือไม่ และตรวจสอบว่า hash ที่ระบบสร้างออกมามีรูปแบบถูกต้องตรงตาม bcrypt standard
แนวปฏิบัติที่ดีที่สุด
- ใช้ password_hash() และ password_verify() เสมอ — อย่า reinvent the wheel ด้วยการเขียนฟังก์ชันแฮชเอง ฟังก์ชันของ PHP ผ่านการตรวจสอบจากผู้เชี่ยวชาญด้านความปลอดภัยทั่วโลกมาแล้ว
- เลือก cost factor ที่เหมาะสม — ทดสอบบนเซิร์ฟเวอร์จริง ตั้งเป้าให้การแฮชใช้เวลา 100–200ms อย่าใช้ค่า 4 ซึ่งเร็วเกินไป หรือค่า 31 ซึ่งอาจทำให้เซิร์ฟเวอร์ทำงานช้าจนผู้ใช้ได้รับผลกระทบ
- ห้ามเก็บรหัสผ่านเป็น plain text หรือใช้ hash แบบเร็ว — MD5, SHA-1 และ SHA-256 ไม่เหมาะสำหรับการจัดเก็บรหัสผ่าน เพราะถูก brute-force ได้ในเวลาไม่กี่วินาที
- เก็บ hash ในคอลัมน์ที่กว้างพอ — bcrypt hash ยาว 60 ตัวอักษร ควรใช้คอลัมน์ประเภท VARCHAR(255) เพื่อรองรับการอัปเกรดอัลกอริทึมในอนาคต เช่น Argon2id ที่ให้ hash ยาวกว่า
- บังคับใช้ HTTPS ทุกการเชื่อมต่อ — hash ที่ดีไม่มีความหมายถ้ารหัสผ่านถูกดักจับระหว่างทาง ควรใช้ TLS กับทุกหน้าเว็บที่เกี่ยวข้องกับ authentication
- ไม่จำกัดความยาวรหัสผ่านต่ำเกินไป — เปิดให้ผู้ใช้ใช้รหัสผ่านยาวและซับซ้อนได้เต็มที่ แล้วปล่อยให้ bcrypt จัดการเรื่องความปลอดภัย อย่าตัดรหัสผ่านเกิน 72 ไบต์โดยไม่จำเป็น (bcrypt จำกัดที่ 72 bytes)
ลองใช้ PHP Password Hash Generator วันนี้
การรักษาความปลอดภัยของรหัสผ่านไม่ควรเป็นเรื่องซับซ้อนหรือน่ากลัว เครื่องมือ PHP Password Hash Generator ของเราช่วยให้คุณสร้างและตรวจสอบ bcrypt hash ได้ในไม่กี่วินาที พร้อมเรียนรู้เรื่อง cost factor ไปด้วยในตัว ไม่ว่าคุณจะกำลังสร้างระบบใหม่ ดูแลระบบเดิม หรือใช้เป็นเครื่องมือสอนทีม development ทุกคนสามารถเข้าถึงได้ฟรี ไม่ต้องสมัครสมาชิก
ลองเปิดใช้งานดูเลย แล้วคุณจะเห็นว่าการจัดการ password hashing ให้ปลอดภัยนั้นง่ายกว่าที่คิด แค่ไม่กี่คลิกก็ได้ hash ที่พร้อมใช้งานในโปรดักชันแล้ว
เครื่องมือที่เกี่ยวข้อง
- เครื่องมือตรวจสอบ Password Hash — ตรวจสอบว่ารหัสผ่านของคุณตรงกับ hash ที่กำหนดหรือไม่
- เครื่องมือสร้างรหัสผ่าน — สร้างรหัสผ่านที่แข็งแรงและคาดเดายากสำหรับผู้ใช้ของคุณ
- เครื่องมือสร้าง Hash — สร้าง hash หลากหลายอัลกอริทึมสำหรับงานอื่น ๆ ที่ไม่ใช่การจัดเก็บรหัสผ่าน
บทความนี้จัดทำโดย Online Tools Forge Team เพื่อช่วยให้นักพัฒนาไทยเข้าใจและใช้งาน PHP password hashing ได้อย่างถูกต้องและปลอดภัย หากมีคำถามหรือข้อเสนอแนะเพิ่มเติม สามารถติดต่อเราได้เสมอ