Hash Type Identifier: ระบุอัลกอริทึม hash นิรนามจากรูปร่างและ prefix
วาง hash ตัวไหนก็ได้ แล้วรับรายการอัลกอริทึมที่น่าจะใช่เรียงลำดับจากความยาว, charset และ signature prefix อย่าง bcrypt, Argon2 และ sha512crypt — เร็ว ฟรี และทำงานฝั่ง client 100%
Table of Contents
Hash Type Identifier: ระบุอัลกอริทึม hash นิรนามจากรูปร่างและ prefix
ทุกงานด้าน security ล้วนเจอช่วงเวลาแบบเดียวกัน: เจอ string ที่ชัดเจนว่าเป็น hash แต่ไม่มีป้ายบอกว่ามันมาจากอะไร งาน incident response และ CTF มักเริ่มต้นด้วย hash blob ไร้ชื่อที่ดึงมาจาก log, database dump หรือ config เก่าๆ — และก่อนคุณจะ verify รหัสผ่าน, ลอง crack หรือวางแผน migration ได้ คุณต้องรู้ก่อนว่ากำลังมองอัลกอริทึมตัวไหนอยู่ การเดาเปลืองเวลาเป็นชั่วโมง แต่รูปร่างของ string มักรู้คำตอบอยู่แล้ว
Hash Type Identifier ฟรีของเราเปลี่ยนรูปร่างนั้นเป็นคำตอบเรียงลำดับในการวางครั้งเดียว เครื่องมืออ่านความยาวของ string, character set และ — ถ้ามี — signature prefix ที่รูปแบบ password hashing สมัยใหม่พกมาด้วยเสมอ แล้วส่งรายการอัลกอริทึมที่น่าจะใช่กลับมาพร้อมเรียงตามความมั่นใจ ทุกอย่างรันในเบราว์เซอร์ 100% ไม่มีการอัปโหลด, log หรือเก็บสิ่งที่คุณวางเข้าไปเลย
คู่มือนี้อธิบายว่าการ identify hash ทำงานอย่างไรจริงๆ — ทำไม hex 32 ตัวอักษรถึงบอกอะไรได้มากมาย, การเห็น $2b$ หรือ $6$ นำหน้า hash บอกอะไรคุณ และทำไม digest 64-hex เพียงอย่างเดียวไม่มีวันสรุปได้ว่าเป็น SHA-256 — พร้อม workflow ประจำวันที่เครื่องมือ identify แบบเร็วและเป็นส่วนตัวช่วยประหยัดเวลาได้จริง
ทำไมต้องใช้ Hash Type Identifier?
- ได้ผู้เข้าชิงเรียงลำดับทันที ไม่ใช่การเดาคำตอบเดียว — รูปแบบ hash ทับซ้อนกันตลอดเวลา: hex 40 ตัวอักษรอาจเป็น SHA-1 หรือ RIPEMD-160 และระบบ legacy ยุคเก่ายังผลิตรูปแบบไม่เป็นมาตรฐานอีกเพียบ เครื่องมือจึงคืนรายการเรียงลำดับให้คุณเห็นคำตอบที่น่าจะใช่และตัวเลือกที่สมเหตุสมผลเรียงข้างกัน แทนที่จะเดิมพันทุกอย่างกับชื่อเดียว
- Prefix signature ทำหน้าที่หนักที่สุด — password hash พกคำอธิบายตัวเองมาด้วย: $2a$/$2b$ คือ bcrypt, $argon2id$ คือ Argon2id, $6$ คือ sha512crypt ที่โผล่มาจาก /etc/shadow โดยตรง เมื่อมี prefix เครื่องมือจะบอกอัลกอริทึมและ format family ที่แน่นอน ไม่ต้องกั๊ก
- วิเคราะห์ความยาวและ charset ในรอบเดียว — เครื่องมือจำแนก input เป็น hex, base64 หรือ other, decode digest แบบ base64 เป็นความยาวไบต์ และจับคู่ทุกขนาด digest มาตรฐาน — 32, 40, 56, 64, 96, 128 hex และอื่นๆ — กับอัลกอริทึมที่ผลิตมัน
- เป็นส่วนตัว 100% ฝั่ง client — การ identify hash ที่เจอใน log ของ production เป็นงานที่ละเอียดอ่อน การวิเคราะห์รันทั้งหมดใน tab เบราว์เซอร์ของคุณ แม้ตัดอินเทอร์เน็ตก็ยังใช้ได้ ไม่มี upload, ไม่มี account, ไม่มี telemetry
- ครอบคลุมทั้งสมัยใหม่และ legacy — ตั้งแต่ Argon2 และ scrypt ไปจนถึง md5crypt, Apache $apr1$ และ PHPass — รูปแบบที่คุณเจอจริงในสนาม ไม่ใช่แค่ตัวที่อยู่ในคู่มือ best practice ยุคนี้
- ฟรีและทันที — ไม่ต้องสมัคร, ไม่จำกัดการใช้งาน, ไม่ต้องติดตั้ง เปิดหน้าเว็บ, วาง, อ่านคำตอบ
ฟีเจอร์หลัก
| ฟีเจอร์ | รายละเอียด |
|---|---|
| การวิเคราะห์ input | ตรวจจับความยาวและ character set (hex, base64, other) |
| การตรวจจับ prefix | bcrypt, Argon2i/Argon2d/Argon2id, sha512crypt, sha256crypt, md5crypt, Apache apr1, PHPass, scrypt, PBKDF2, LDAP และอื่นๆ |
| จับคู่ digest แบบ hex | ความยาว digest มาตรฐาน (32 ถึง 128 hex chars) จับคู่กับอัลกอริทึมที่ตรงกัน |
| การจัดการ base64 | decode เป็นความยาวไบต์แล้วเทียบกับขนาด digest ที่รู้จัก |
| ผลลัพธ์เรียงลำดับ | รายการผู้เข้าชิงพร้อมระดับความมั่นใจและโน้ตอธิบาย |
| การรัน | ฝั่ง client 100% ในเบราว์เซอร์ — ใช้ offline ได้ |
สามข้อนี้ควรดูใกล้ขึ้นอีกนิด:
- Prefix เหนือกว่าทุกอย่าง — string ที่ขึ้นต้นด้วย $ แบบ modular crypt บอกตัวตนเอง อัลกอริทึม และมักพร้อม salt กับ cost parameter เดินทางอยู่ใน string นั่นเอง ดังนั้น prefix match จึงถูกรายงานด้วยความมั่นใจสูงสุดและแนบ format family มาด้วย (เช่น "Unix /etc/shadow password hash") ควบคู่กับชื่ออัลกอริทึม
- ความยาวที่ไม่ตรงมาตรฐานถูกรายงาน ไม่ใช่เดา — hex 33 ตัวอักษรไม่ใช่ digest ของอะไรมาตรฐานเลย และเครื่องมือก็บอกแบบตรงๆ แทนการเดาคำตอบที่ทำให้คุณเสียเวลาทั้งบ่าย
- เหตุผลมาพร้อมทุกคำตอบ — ผู้เข้าชิงแต่ละตัวมีโน้ตอย่าง "64 hex chars = 32 bytes" คุณจึงเข้าใจว่าทำไมรายการถึงเป็นแบบนี้ ไม่ใช่แค่รับคำพิพากษา
วิธีใช้งาน
- เปิด Hash Type Identifier ไม่ต้องติดตั้งหรือสมัครอะไร พอหน้าเว็บโหลดแล้วแม้ offline ก็ยังใช้ได้
- วาง hash ลงช่อง input copy มาทั้ง string — กับ password hash ตัว prefix และทุกอย่างที่ตามมาล้วนสำคัญ อย่าตัดตัวอักษรหน้าหรือหลังทิ้ง
- อ่านบรรทัดสรุปก่อน เครื่องมือรายงานความยาวและ character set ของ input ทันที แค่นี้ก็แคบขอบเขตลงมากแล้ว: hex 32 ตัวอักษรเล่าเรื่องต่างจากสัญลักษณ์ปนกัน 60 ตัวอย่างสิ้นเชิง
- เช็กว่ามี prefix match ไหม ถ้า string ขึ้นต้นด้วย signature ที่รู้จักอย่าง $2b$, $argon2id$ หรือ $6$ แปลว่าคุณได้คำตอบแล้วแทบจะทันที พร้อม format family ที่มันอยู่
- ชั่งน้ำหนักผู้เข้าชิงที่เรียงลำดับมา ถ้าไม่มี prefix ให้เทียบรายการกับบริบท — ข้อมูล /etc/shadow ของ Linux, ระบบ Windows เก่า, เอกสาร API — แล้วยืนยัน hypothesis อันดับหนึ่งด้วย hash ทดสอบ ดังที่จะอธิบายต่อไป
อ่านรูปร่างและ prefix ของ hash
ความยาว digest บอกอะไร
Digest แบบไม่มี salt และไม่ได้ encode มีความยาวคงที่ที่รู้จักกันดี ทำให้ความยาวเป็นเบาะแสแรกและเชื่อถือได้ที่สุดสำหรับ hex ดิบ:
| ความยาว (hex chars) | ไบต์ | อัลกอริทึมที่พบทั่วไป |
|---|---|---|
| 32 | 16 | MD5, MD4, NTLM, RIPEMD-128 |
| 40 | 20 | SHA-1, RIPEMD-160 |
| 56 | 28 | SHA-224, SHA-512/224 |
| 64 | 32 | SHA-256, SHA3-256, BLAKE2s-256, Keccak-256 |
| 96 | 48 | SHA-384, SHA-512/384 |
| 128 | 64 | SHA-512, WHIRLPOOL, BLAKE2b-512 |
hex 32 ตัวจะเป็น SHA-1 ไม่ได้ และ 128 ตัวก็เป็น MD5 ไม่ได้ — ความยาวคือตัวกรองแบบแข็ง เครื่องมือจึงเริ่มจากมันก่อนสิ่งอื่นใด
prefix บอกอะไร
รูปแบบ password hashing ตั้งใจฝัง metadata ของตัวเองไว้ เพื่อให้ verifier ยังคำนวณซ้ำได้ในอีกหลายปีข้างหน้า การ self-description นี้คือสัญญาณระบุตัวตนที่แข็งแรงที่สุดที่คุณจะเคยได้เจอ:
$2b$12$[22-char base64 salt][31-char base64 digest] — bcrypt $argon2id$v=19$m=65536,t=3,p=1$[salt]$[digest] — Argon2id $6$[salt]$[86-char base64 digest] — sha512crypt $5$[salt]$[43-char base64 digest] — sha256crypt
อ่านบรรทัดแรก: $2b$ หมายถึง bcrypt, ตัวเลขต่อจากนั้น (12) คือ cost factor ส่วนที่เหลือคือ base64 salt บวก digest บรรทัดที่สองคือรูปแบบ PHC string ของ Argon2 ที่สะกดชื่ออัลกอริทึม, version และ tuning parameter ทั้งหมดออกมาเป็นข้อความล้วน ส่วน $6$ และ $5$ มาจาก Unix modular crypt format ที่ใช้ในไฟล์ /etc/shadow สำหรับ sha512crypt และ sha256crypt ตามลำดับ prefix อื่นๆ ที่จะเจอในระบบจริง ได้แก่ $1$ (md5crypt), $apr1$ (Apache htpasswd), $P$ (PHPass รูปแบบคลาสสิกของ WordPress), {SHA} และ {SSHA} (LDAP) และตัวแปร $scrypt$ หรือ $pbkdf2 จาก framework ยุคใหม่
กฎใช้งานจริงคือ: ถ้า hash ขึ้นต้นด้วย $ หรือ { ให้หยุดวิเคราะห์แล้วเริ่มอ่าน — string กำลังบอกคุณเองว่ามันคืออะไร
ทำไมความยาวอย่างเดียวสรุป hash 64-hex ไม่ได้
นี่คือกับดักคลาสสิก หลายอัลกอริทึมสมัยใหม่ emit ผลลัพธ์ 64 hex ตัวอักษรพอดีทั้งคู่: SHA-256, SHA3-256, Keccak-256 (ตัวแปรที่ Ethereum ใช้ — โปรดสังเกตว่า Keccak-256 กับ SHA3-256 ไม่ใช่ function เดียวกัน แม้ขนาด output เท่ากัน), BLAKE2s-256 และ SM3 เป็นต้น string 64-hex จึงเป็น "ตัวใดตัวหนึ่งในนี้" และไม่มีอะไรในรูปร่างบอกได้ว่าตัวไหน ความกำกวมแบบเดียวกันมีอยู่ที่ 40 hex (SHA-1 เทียบ RIPEMD-160) และที่ 128 (SHA-512 เทียบ WHIRLPOOL และ BLAKE2b-512)
นี่แหละคือเหตุผลที่เครื่องมือคืนผู้เข้าชิงแบบเรียงลำดับพร้อมโน้ต แทนคำตอบเดียวที่เชื่อมั่นเกินไป: ความยาวให้รายชื่อรอบสุดท้ายแก่คุณ และรายชื่อนั้นก็ซื่อตรงว่าตัดสินอะไรไม่ได้
ผู้เข้าชิงเรียงลำดับ และวิธียืนยัน
ให้ถือว่าการ identify คือการสร้าง hypothesis แล้วยืนยันมันอย่างตั้งใจ กับ digest ดิบ การยืนยันที่เร็วที่สุดคือการทดลองควบคุม: hash string สั้นๆ ที่รู้จักด้วยอัลกอริทึมที่คิดว่าใช่ ผ่านเครื่องมือ hash ที่น่าเชื่อถือ แล้วเช็กว่ารูปร่าง output — ความยาว, encoding, การมีตัวคั่น — ตรงกับ string ที่กำลังสอบสวน ถ้าสงสัยว่าเป็น bcrypt หรือ Argon2 ให้ใช้ตัว verify แทนตัว crack: วาง hash ที่เก็บไว้บวก password ที่รู้หรือ password ตัวเลือกลงโหมด verify ของ bcrypt หรือ Argon2 แล้วให้การคำนวณเพียงรอบเดียวยืนยันรูปแบบ การยืนยันใช้เวลาไม่กี่วินาที แต่การ crack กับอัลกอริทึมผิดใช้ GPU หลายชั่วโมงและไม่พิสูจน์อะไรเลย
กรณีใช้งานจริง
Triage ใน incident response
Database ที่ถูกโจรกรรมมาถึงโต๊ะคุณเป็น column ของ string 60 ตัวอักษรที่ขึ้นต้นด้วย $2y$ ภายในไม่กี่วินาทีคุณรู้แล้วว่า credential ถูกเก็บแบบ bcrypt ซึ่งเปลี่ยนคณิตของการ contain ทั้งหมด: password spray กับ API ของคุณแทบไม่ feasible อย่างที่คุณกลัว และการแจ้งเตือน user ก็ซื่อสัตย์ได้เรื่องความทนทานของ hash ที่เก็บไว้ ในทางกลับกัน ถ้าเจอ digest MD5 32-hex เปล่าๆ ใน dump เดียวกัน เรื่องนี้ยกระดับ incident ขึ้นทันที การเรียกชื่ออัลกอริทึมในไม่กี่นาทีแรกของการสอบสวน กำหนดทุกการตัดสินใจหลังจากนั้น
โจทย์ CTF
โจทย์ crypto ระดับ warmup ส่วนใหญ่หยิบ hash ไม่มีป้ายมาให้ และคาดหวังให้คุณระบุมันก่อนอย่างอื่น วาง string, อ่านว่า "40 hex characters — SHA-1 หรือ RIPEMD-160", ลองตัวที่จัดอันดับหนึ่งกับ wordlist ของคุณ แล้วไปต่อยังส่วนที่น่าสนใจของโจทย์ เครื่องมือนี้ยังมือถือสำหรับเช็กว่า hash ที่คุณสร้างเองใน writeup มีหน้าตาตามที่ควรเป็นหรือไม่
Audit ตอน migrate — เรายังเก็บอะไรอยู่?
ก่อนจะอัปเกรด password storage ได้ คุณต้องมี inventory ของสิ่งที่มีอยู่ก่อน สุ่ม row จาก credential column แต่ละตัวใน staging copy วางค่าตัวแทนไม่กี่ค่าลงเครื่องมือ แล้วสร้างภาพรวม: ตารางไหนยังเก็บ MD5 ไม่มี salt, ตารางไหนมี $2b$, ตารางไหนใช้ $argon2id$ ไปแล้ว หลักฐานจาก prefix ใช้เป็นเอกสาร audit ได้ซ้ำ — ภาพหน้าจอ hash $1$ คู่กับชื่อ column บอกอะไรได้มากกว่าย่อหน้าของโน้ตอีก
วางแผนอัปเกรด password hash
พอมี inventory แล้ว การวางแผนกลายเป็นเรื่องคณิตศาสตร์ Account ที่อยู่บน bcrypt หรือ Argon2id สามารถ rehash แบบโปร่งใสเมื่อ login ครั้งถัดไป ส่วน account ที่อยู่บน MD5 ไม่มี salt หรือ sha512crypt รุ่นเก่าต้อง rehash ทันทีพร้อมบังคับ reset หรือจัดตารางหมุน credential ตามระดับความเสี่ยง การ identify คือ input แรกของแผนนั้น: มันบอกขนาดของแต่ละกลุ่มและต้นทุนของเส้นทาง migration แต่ละเส้น ก่อนใครจะเขียน migration code แม้บรรทัดเดียว
แนวทางปฏิบัติที่ดีที่สุด
- ยืนยันก่อนค่อย crack — การ identify จัดอันดับ hypothesis ไม่ได้ verify มัน รันตัวที่จัดอันดับหนึ่งผ่านการ hash-and-compare จริง ก่อนเผา compute หลายชั่วโมงไปกับอัลกอริทึมผิด
- อย่าวาง password hash ของ production จริงลงเว็บไซต์ไม่รู้จัก — เครื่องมือนี้คำนวณฝั่ง client ล้วน แต่นิสัยนี้สำคัญทุกที่: password hash ที่วางลง web service สุ่มสี่สุ่มห้าคือ credential ที่ส่งมอบให้คนแปลกหน้า ตัวอย่างที่ละเอียดอ่อนควรใช้เครื่องมือ offline หรือฝั่ง client
- ถือว่าทุกคำตอบเป็น hypothesis — ความยาวคือหลักฐาน ไม่ใช่หลักฐานชี้ขาด เมื่อสองอัลกอริทึมใช้ขนาด digest เดียวกัน ทั้งคู่ยัง "ใช่" อยู่จนกว่าบริบทหรือการ verify จะตัดตัวใดตัวหนึ่งออก
- จำไว้ว่า salt มองไม่เห็นในรูปร่าง — คุณแยก MD5 ที่มี salt กับไม่มี salt ด้วยสายตาไม่ได้ — salt เปลี่ยนค่า ไม่ได้เปลี่ยนความยาว มีแต่รูปแบบที่พก salt ใน string (bcrypt, Argon2, sha512crypt) เท่านั้นที่เผยมัน และเผยผ่าน prefix
- เลือกหลักฐาน prefix ก่อนหลักฐานความยาวเสมอ — prefix แบบ $ หรือ {...} แทบสรุปได้เลย แต่ความยาวที่ตรงกันเป็นเพียงตัวกรองที่ผลิตรายชื่อรอบสุดท้าย
- บันทึกสิ่งที่ค้นพบ — จดอัลกอริทึมที่ระบุได้, ต้นทางของตัวอย่าง และระดับความมั่นใจ ตัวคุณในอนาคต — หรือ auditor ที่ถามคำถามแหลมคม — จะต้องใช้ทั้งสามอย่าง
พร้อมระบุ hash นิรนามแล้วหรือยัง?
เปิด Hash Type Identifier ฟรี วาง string ลงไป แล้วรับคำพิพากษาเรียงลำดับในไม่กี่วินาที — การวิเคราะห์ความยาว, charset และ prefix ทำงานในเบราว์เซอร์ล้วนๆ โดยไม่อัปโหลดอะไรไปที่ไหนเลย เลิกเดากันเถอะว่า hash นั้นคืออะไร ปล่อยให้รูปร่างของมันบอกเอง
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- Bcrypt Generator — สร้างและ verify bcrypt hash เพื่อยืนยันผล $2b$ กับ password ที่รู้จัก
- File Hash Checker — คำนวณ digest MD5, SHA-1 และ SHA-256 ของไฟล์ เพื่อยืนยันผู้เข้าชิงแบบ digest ดิบ
- Argon2 Hash Generator — สร้างและ verify Argon2id PHC string มาตรฐานปัจจุบันของการเก็บรหัสผ่าน
คำถามที่พบบ่อย
ถ: วาง hash จาก incident จริงลงที่นี่ปลอดภัยไหม?
ตอบ: ปลอดภัย การวิเคราะห์รันในเบราว์เซอร์ 100% — string ไม่เคยออกจากอุปกรณ์ของคุณ และเครื่องมือยังใช้งานได้แม้ตัดอินเทอร์เน็ต ถ้าอยากระมัดระงวงสูงสุดในงานที่อ่อนไหว ให้ใช้แบบ offline หรือใน browser profile แยกต่างหาก
ถ: เครื่องมือบอกว่า hex 64 ตัวของฉันอาจเป็นหลายอัลกอริทึม แล้วมันคือตัวไหนกันแน่?
ตอบ: ความยาวแยก SHA-256 ออกจาก SHA3-256, Keccak-256 หรือ BLAKE2s-256 ไม่ได้ — ทุกตัว emit 64 hex characters พอดี ให้ใช้บริบท (ระบบไหนผลิต string นี้) บวกการทดสอบควบคุมหนึ่งครั้ง: hash string ที่รู้จักด้วยอัลกอริทึมที่เป็นตัวเลือก แล้วเทียบ output มีแต่การ verify เท่านั้นที่ชี้ขาดได้
ถ: prefix $2b$ แปลว่าอะไร?
ตอบ: มันหมายถึง bcrypt รูปแบบ password hashing ที่อิง Blowfish ในตัวแปรที่แก้ไขแล้ว ตัวพี่น้องอย่าง $2a$, $2x$ และ $2y$ เป็นตัวแปรอื่นของ bcrypt และตัวเลขหลัง prefix (เช่น $2b$12$) คือ cost factor จากนั้น string จะต่อด้วย base64 salt และ digest
ถ: จะรู้ได้ไหมว่า hash มี salt หรือไม่?
ตอบ: จากรูปร่างเพียงอย่างเดียวไม่ได้ salt เปลี่ยนค่า digest ไม่ได้เปลี่ยนความยาว MD5 ที่มีและไม่มี salt จึงหน้าตาเหมือนกันที่ 32 hex characters พอดี มีแต่รูปแบบที่ฝัง salt ไว้ใน string — bcrypt, Argon2, sha512crypt — เท่านั้นที่เปิดเผย และเปิดเผยผ่าน prefix ของมัน
ถ: ระบุอัลกอริทึมได้แปลว่า crack ได้เลยหรือไม่?
ตอบ: ไม่ — และปกติก็ไม่ควร การ identify แค่เรียกชื่ออัลกอริทึม ส่วนการ recover จะ feasible หรือไม่ขึ้นกับความแข็งแรงของอัลกอริทึม, salt, password policy เบื้องหลัง และที่สำคัญที่สุดคือคุณได้รับอนุญาตหรือไม่ กับ password hash ก้าวถัดไปที่ถูกต้องแทบจะเสมอคือการ verify กับ password ที่รู้จัก ไม่ใช่การโจมตี
ขอให้สนุกกับการ identify hash!