ตัวสร้าง 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 ชัดเจน
เครื่องมือที่เกี่ยวข้อง
ตัวเข้ารหัสไฟล์ Base64
เข้ารหัสไฟล์ใดก็ได้ (PDF, ZIP, รูปภาพ, ไฟล์ปฏิบัติการ) เป็นข้อความ Base64 เพื่อฝังใน JSON, อีเมล, YAML หรือ data URI ทำงานในเครื่องของคุณ ไม่มีการอัปโหลด
เครื่องมือเข้ารหัสซีซาร์
เข้ารหัสและถอดรหัสข้อความด้วยรหัสซีซาร์ เลื่อนได้ตั้งแต่ 1-25 รองรับ ROT13 เป็นกรณีพิเศษ และคงเครื่องหมายวรรคตอนกับตัวพิมพ์ใหญ่-เล็กไว้เหมือนเดิม
ตัวเข้ารหัสและถอดรหัส Base58
เข้ารหัสข้อความ UTF-8 หรือไบต์เลขฐานสิบหก และถอดรหัส Base58 อย่างปลอดภัยด้วยชุดอักขระ Bitcoin, Ripple หรือ Flickr
ตัวเข้ารหัสรหัสลับ A1Z26
เข้ารหัสข้อความด้วยรหัสลับ A1Z26 (A=1, B=2, ... Z=26) หรือถอดรหัสลำดับตัวเลขกลับเป็นตัวอักษร พร้อมปรับตัวคั่นได้
ตัวสร้าง bcrypt
สร้าง bcrypt hash จากรหัสผ่าน plaintext ปรับ cost factor ได้ตั้งแต่ 4 ถึง 13 ใช้ร่วมกับ Laravel, Django, Node และ PHP ได้
เข้ารหัส / ถอดรหัส AES
เข้ารหัสและถอดรหัสข้อความความเสี่ยงต่ำด้วย AES cipher ของ OpenSSL passphrase จะถูก hash ด้วย SHA-256 และผลลัพธ์ Base64 มี IV รวมกับข้อความเข้ารหัส
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Generador de Hash bcrypt [ES]
- bcrypt-hashgenerator [NL]
- bcrypt 哈希生成器 [ZH]
- bcrypt 해시 생성기 [KO]
- Générateur de hachage bcrypt [FR]
- bcrypt-hashgenerator [SV]
- Generator Hash bcrypt [ID]
- Gerador de Hash bcrypt [PT]
- bcrypt-Hash-Generator [DE]
- bcrypt Hash Oluşturucu [TR]
- Generator hashy bcrypt [PL]
- bcrypt Hash Generator [EN]
- bcrypt Hashジェネレーター [JA]
- Trình tạo hash bcrypt [VI]
- مولد Hash bcrypt [AR]
- Generatore di hash bcrypt [IT]
- Генератор bcrypt-хешей [RU]