เครื่องมือสร้าง Hash MD5 และ SHA
- ไม่ต้องสมัครสมาชิก
- ฟรี 100%
- ไม่เก็บข้อมูลบนเซิร์ฟเวอร์
พิมพ์หรือวางข้อความแล้วค่า hash จะขึ้นครบทั้งห้าแบบพร้อมกัน คุณจึงไม่ต้องรู้ก่อนว่า checksum ที่จะเทียบใช้อัลกอริทึมไหน ระบบคำนวณจากไบต์ UTF-8 เหมือนที่เครื่องมือบนบรรทัดคำสั่งทำ ส่วน MD5 กับ SHA-1 ใส่ไว้เพราะ checksum และระบบเก่ายังใช้กันอยู่ และมีป้ายกำกับไว้ว่าไม่เหมาะกับรหัสผ่านหรือลายเซ็นดิจิทัล
| อัลกอริทึม | ค่า Hash | การทำงาน |
|---|
ควรใช้อัลกอริทึมไหน
| อัลกอริทึม | ความยาว | เหมาะกับ | กันการชนกันโดยเจตนาได้ไหม |
|---|---|---|---|
| MD5 | 32 ตัวอักษร hex | ตรวจว่าไฟล์ที่ดาวน์โหลดมาครบไหม | ไม่ได้: ทำให้ชนกันใช้เวลาไม่กี่นาที |
| SHA-1 | 40 ตัวอักษร hex | รหัสอ็อบเจกต์ของ Git ระบบเก่า | ไม่ได้: แตกจริงมาตั้งแต่ปี 2017 |
| SHA-256 | 64 ตัวอักษร hex | ตัวเลือกตั้งต้นสำหรับงานใหม่ทุกอย่าง | ได้ |
| SHA-384 | 96 ตัวอักษร hex | กรณีที่มีข้อกำหนดให้ใช้ค่ายาวขึ้น | ได้ |
| SHA-512 | 128 ตัวอักษร hex | เหมือนข้างบน และเร็วกว่า SHA-256 บนเครื่อง 64 บิต | ได้ |
ความต่างในคอลัมน์สุดท้ายแคบกว่าที่ฟังดู MD5 ใช้ตรวจไฟล์ที่ดาวน์โหลดมาไม่ครบได้สบาย เพราะไฟล์เสียเป็นอุบัติเหตุ และอุบัติเหตุไม่ทำให้ค่า hash ชนกันพอดี แต่ใช้ไม่ได้ในที่ที่ ผู้โจมตีเลือกข้อมูลเข้าเองได้ เพราะการชนกันคือตัวการโจมตี
สิ่งหนึ่งที่ทั้งหมดนี้ไม่ได้มีไว้ทำคือเก็บรหัสผ่าน เพราะถูกออกแบบมาให้เร็ว ซึ่งตรงข้ามกับที่การเก็บรหัสผ่านต้องการ ให้ใช้ bcrypt, scrypt หรือ Argon2 ที่จงใจทำให้ช้า
วิธีตรวจไฟล์ที่ดาวน์โหลดกับ checksum ที่ประกาศไว้
- คำนวณ hash ของไฟล์บนเครื่องคุณเอง ไม่ต้องลงโปรแกรมเพิ่ม
บน macOS หรือ Linux ใช้
shasum -a 256 ชื่อไฟล์บน Windows ใช้certutil -hashfile ชื่อไฟล์ SHA256 - เทียบกับค่าที่ประกาศไว้ข้างลิงก์ดาวน์โหลด
- ถ้าไม่ตรง แปลว่าไฟล์ที่ได้ไม่ใช่ไฟล์ที่เขาเผยแพร่ ลองโหลดใหม่ก่อนจะคิดไปไกล เพราะไฟล์โหลดไม่ครบพบบ่อยกว่าไฟล์ถูกแก้ไขมาก
ถ้าอยากเทียบทีละตัวอักษรแทนการเพ่งในหน้าจอ terminal ก็วางทั้งสองค่าลงในช่องด้านบนได้
สิ่งที่ควรรู้ว่าวิธีนี้พิสูจน์อะไร มันพิสูจน์ว่าไฟล์ตรงกับที่เว็บนั้นประกาศไว้ ถ้าตัวเว็บเองถูกเจาะ ค่า checksum ก็ถูกประกาศโดยผู้โจมตีคนเดียวกัน สิ่งที่กันกรณีนั้นได้คือลายเซ็นดิจิทัล ไม่ใช่ checksum
ทำไมข้อความเดียวกันถึงได้ค่า hash ไม่เท่ากัน
hash คำนวณจากไบต์ ไม่ใช่จากตัวอักษร อะไรก็ตามที่เปลี่ยนไบต์จะเปลี่ยนค่าทั้งหมด
- การขึ้นบรรทัดใหม่ต่อท้าย ตัวการอันดับหนึ่ง คำสั่ง
echo "abc"คำนวณจากสี่ไบต์ ไม่ใช่สามไบต์ ให้ใช้echo -nหรือprintfแทน - การเข้ารหัสอักขระ เครื่องมือนี้ใช้ UTF-8 เหมือนเครื่องมือบนบรรทัดคำสั่ง ระบบที่ใช้ UTF-16 จะได้คนละค่าจากข้อความเดียวกัน
- อักขระที่มองไม่เห็น ช่องว่างแบบไม่ตัดบรรทัดที่คัดลอกมาจากหน้าเว็บไม่ใช่ช่องว่างธรรมดา และอักขระ carriage return จากไฟล์ฝั่ง Windows ก็ไม่ใช่ความว่างเปล่า
คำถามที่พบบ่อย
ทำไมยังมี MD5 ทั้งที่ไม่ปลอดภัยแล้ว
MD5 ใช้ไม่ได้ในกรณีที่ผู้โจมตีเลือกข้อมูลเข้าเองได้ เพราะการทำไฟล์สองไฟล์ให้ได้ค่า MD5 เท่ากันทำได้ถูกมากมาหลายปีแล้ว แต่มันยังเป็นเลขที่หน้าดาวน์โหลดจำนวนมากพิมพ์กำกับไว้ และการเทียบเลขนั้นก็เป็นสิ่งที่ควรทำได้ ถ้าเลือกเองได้ให้ใช้ SHA-256
ใช้กับไฟล์ได้ไหม
ไม่ได้ ช่องนี้รับเฉพาะข้อความที่พิมพ์หรือวาง แต่เครื่องคุณทำได้อยู่แล้วโดยไม่ต้องลงโปรแกรมเพิ่ม บน macOS และ Linux ใช้ shasum -a 256 ชื่อไฟล์ ส่วนบน Windows ใช้ certutil -hashfile ชื่อไฟล์ SHA256
ทำไมค่าที่ได้จาก terminal ไม่ตรงกัน
เกือบทุกครั้งเป็นเพราะขึ้นบรรทัดใหม่ต่อท้าย คำสั่ง echo จะเติมให้อัตโนมัติ ทำให้ echo "abc" คำนวณจากสี่ไบต์แทนที่จะเป็นสามไบต์ ถ้าจะเทียบกับที่พิมพ์ในเว็บนี้ ให้ใช้ echo -n หรือ printf แทน
ข้อความของฉันถูกอัปโหลดไหม
ไม่ ค่า SHA คำนวณด้วยระบบเข้ารหัสที่ติดมากับเบราว์เซอร์ ส่วน MD5 คำนวณด้วย JavaScript บนหน้านี้ และนโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้