ตัวสร้าง bcrypt Hash
สร้าง hash
ค่ายิ่งสูง = ช้าลงแต่ปลอดภัยขึ้น ค่าเริ่มต้นที่ดีคือ 12
บางครั้งคุณมี bcrypt hash จาก backup เก่าและมีรหัสผ่าน plaintext แล้วต้องรู้ว่ามันตรงกันไหม หรือคุณมีรหัสผ่านและอยากได้ hash ที่ cost factor หนึ่งจะสร้างออกมา เครื่องมือนี้ทำได้ทั้งสองอย่าง: พิมพ์รหัสผ่านแล้วสร้าง hash ใหม่ หรือวาง hash กับ candidate แล้วบอกว่าการ verify สำเร็จหรือไม่, โดยใช้การเปรียบเทียบแบบ constant-time เช่นเดียวกับระบบ login จริง
สร้างหรือ verify bcrypt
-
1
เลือกโหมด
สร้าง hash ใหม่จากรหัสผ่าน หรือ verify รหัสผ่านกับ hash `$2a$` / `$2b$` / `$2y$` ที่มีอยู่
-
2
สำหรับ generate: ป้อน plaintext และ cost
Cost 4-13; 10-12 คือค่าปกติ ระบบจะสร้าง salt สุ่ม 16-byte ให้ hash แต่ละตัว
-
3
สำหรับ verify: วาง hash และ plaintext
เครื่องมือจะดึง salt และ cost จาก hash แล้ว hash plaintext ใหม่ด้วยพารามิเตอร์เดียวกัน
-
4
อ่านผลลัพธ์
โหมด generate ให้คัดลอก hash 60 ตัวอักษร; โหมด verify คืนค่า match สีเขียวหรือ mismatch สีแดง
ภายในโหมด verify
เมื่อมี hash ที่เก็บไว้ เช่น:
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
ตัวตรวจสอบจะ:
- Parse version (
2b), cost (12), salt (22 ตัวอักษรแรกหลัง cost) และ digest (31 ตัวอักษรท้าย) - รัน bcrypt ซ้ำบน candidate plaintext ด้วย salt และ cost ที่ดึงออกมา
- เปรียบเทียบ digest ที่ได้กับของเดิมด้วย constant-time comparison
ถ้าเปรียบเทียบสำเร็จจะได้ true; ความต่างใดๆ จะได้ false
Constant-time comparison
การเปรียบเทียบสตริงสองตัวด้วย == แบบตรงไปตรงมาจะคืนค่าทันทีเมื่อ byte ต่างกัน, เป็น timing side channel ที่อาจทำให้ leak ตัวเลขของ hash ทีละตำแหน่งได้หากมี sample มากพอ ระบบตรวจรหัสผ่านใน production (และเครื่องมือนี้) ใช้ constant-time compare ที่ตรวจทุก byte เสมอ ดังนั้นเวลาตัดสินใจจึงไม่ขึ้นกับจำนวน byte ต้นที่ตรงกัน
กรณีวินิจฉัยที่พบบ่อย
| อาการ | สาเหตุที่เป็นไปได้ |
|---|---|
| การ verify ล้มเหลว ทั้งที่มั่นใจในรหัสผ่าน | มีช่องว่างต่อท้ายหรือ BOM ใน input ให้ตัดทั้งสองออก |
การ verify ล้มเหลว เวอร์ชัน 2y |
บางไลบรารีไม่ชอบ 2y แต่มันถูกต้องและเข้ากันได้ จากนี้ไปให้ทำ hash ใหม่ด้วย 2b |
| Hash สั้นเกินไป / รูปแบบผิด | ไม่ใช่ bcrypt hash MD5 ยาว 32 ตัวอักษรเลขฐานสิบหก, SHA-1 ยาว 40, bcrypt ยาว 60 พร้อมตัวคั่น $ |
| คำเตือน cost ไม่ตรงกัน | cost ที่เก็บไว้ต่ำกว่านโยบายขั้นต่ำ ควรทำ hash ใหม่เมื่อ login สำเร็จครั้งถัดไป |
Rehash ตอน login
แนวทางที่ดี: เมื่อผู้ใช้ login สำเร็จ ให้ตรวจว่า hash ที่เก็บไว้มี cost ต่ำกว่านโยบายปัจจุบันหรือไม่ ถ้าใช่ ให้ re-hash รหัสผ่านด้วย cost ใหม่แล้วอัปเดตฐานข้อมูล ภายในไม่กี่เดือนคุณจะยกระดับ hash ของผู้ใช้ทั้งหมดได้โดยไม่ต้องขอให้ใครเปลี่ยนรหัสผ่าน
สิ่งที่เครื่องมือนี้ไม่ได้ทำ
- การตรวจสอบทีละหลายรายการ, ออกแบบมาสำหรับ hash ทีละตัว
- การถอดรหัสหรือเดาแบบสุ่ม (brute force), การโจมตีแบบพจนานุกรมหรือ rainbow-table อยู่นอกขอบเขตโดยตั้งใจ
- กู้คืนข้อความรหัสผ่านเดิม, bcrypt เป็นทางเดียว ถ้าลืมรหัสผ่าน ทางเดียวคือการรีเซ็ต
คำถามที่พบบ่อย
รหัสผ่านถูกส่งไปยังเซิร์ฟเวอร์ของเราผ่านการเชื่อมต่อที่เข้ารหัส เนื่องจาก hash และ verify คำนวณที่นั่น ไม่มีการเก็บ ไม่มีการบันทึก และไม่ถูกเพิ่มลงในลิงก์ของหน้าเว็บ
salt ถูกสุ่มต่อ hash นั่นคือจุดประสงค์หลัก, ผู้ใช้สองคนที่มีรหัสผ่านเดียวกันจะได้ hash ต่างกัน ทำให้ rainbow tables ใช้ไม่ได้
ได้ นั่นคือสิ่งที่โหมด verify ทำ: วาง hash ที่คุณมี วางรหัสผ่านที่ต้องการทดสอบ แล้วเครื่องมือจะยืนยันหรือปฏิเสธว่าตรงกัน
รองรับ variant สมัยใหม่ทั้งหมดทำงานร่วมกันได้, digest เข้ากันข้าม version; ต่างกันเฉพาะ tag hash $2$ เก่าบางตัวจากระบบยุคปี 2000 อาจต้องใช้ไลบรารีที่รองรับ legacy ชัดเจน
เครื่องมือที่เกี่ยวข้อง
รหัสแปลงตัวเลขเป็นตัวอักษร
แปลงตัวเลขเป็นตัวอักษรและย้อนกลับด้วยรหัส A=1, B=2 (A1Z26) สำหรับปริศนา คำทาย และเบาะแสในห้องเอสเคปรูม
เครื่องสร้างค่าแฮช MD5
คำนวณค่า checksum แบบ MD5 ของข้อความและไฟล์เพื่อยืนยันความสมบูรณ์ โดยผลลัพธ์จะตรงกับที่ได้จากฟังก์ชัน md5sum และ openssl dgst -md5
เครื่องสร้างพาสเฟรส (Passphrase)
สร้างพาสเฟรสที่จำง่ายจากคำทั่วไปแบบสุ่ม ปรับจำนวนคำ ตัวคั่น การขึ้นต้นด้วยตัวพิมพ์ใหญ่ และตัวเลขต่อท้ายที่เลือกได้
ตัวสร้าง JWT
สร้าง JWT ที่มีการลงนาม โดยกำหนดหัวข้อ (header) แบบกำหนดเอง สิทธิ์ของพารามิเตอร์ในเนื้อหา (payload claims) การลงนามด้วย HMAC หรือ RSA รวมถึงกำหนดระยะเวลาหมดอายุและกลุ่มผู้ใช้งานที่อนุญาต เพื่อใช้ในการทดสอบ
ตัวเข้ารหัสรหัสลับ A1Z26
เข้ารหัสข้อความด้วยรหัสลับ A1Z26 (A=1, B=2, ... Z=26) หรือถอดรหัสลำดับตัวเลขกลับเป็นตัวอักษร พร้อมปรับตัวคั่นได้
เครื่องมือเข้ารหัส Polybius
เข้ารหัสอักษรละตินเป็นพิกัด Polybius หรือถอดรหัสคู่ตัวเลขที่คั่นด้วยช่องว่าง โดยใช้ตาราง 5×5 แบบคงที่ที่รวม I/J
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Generador de Hash bcrypt [ES]
- Trình tạo hash bcrypt [VI]
- bcrypt 해시 생성기 [KO]
- Generator Hash bcrypt [ID]
- Gerador de Hash bcrypt [PT]
- Générateur de hachage bcrypt [FR]
- bcrypt-Hash-Generator [DE]
- مولد Hash bcrypt [AR]
- Generator hashy bcrypt [PL]
- bcrypt Hashジェネレーター [JA]
- bcrypt-hashgenerator [NL]
- bcrypt-hashgenerator [SV]
- bcrypt Hash Generator [EN]
- Generatore di hash bcrypt [IT]
- Генератор bcrypt-хешей [RU]
- bcrypt Hash Oluşturucu [TR]
- bcrypt 哈希生成器 [ZH]