วิธีใช้งาน
- พิมพ์หรือวางข้อความ ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” เพื่อป้อนไบต์ หรือคลิก “เปิดไฟล์” เพื่อแฮชไบต์ของไฟล์ตามจริงทุกไบต์
- ตั้ง “การเข้ารหัสอักขระ” เป็น UTF-8 ไว้ เว้นแต่แฮชต้นฉบับสร้างจากข้อความในชุดอักขระอื่น
- ที่ “รูปแบบเอาต์พุต” ให้เลือก “hex (ตัวพิมพ์เล็ก)” “HEX (ตัวพิมพ์ใหญ่)” หรือ Base64
- หากต้องการตรวจสอบไฟล์ที่ดาวน์โหลด ให้วางค่า MD5 ที่เผยแพร่ไว้ลงในช่อง “เปรียบเทียบกับ” แล้วดูว่าแสดง “ตรงกัน” หรือไม่
MD5 คืออะไร
MD5 (Message-Digest Algorithm 5) ออกแบบโดย Ronald Rivest และเผยแพร่ในปี 1992 เป็น RFC 1321 อัลกอริทึมนี้อ่านอินพุตเป็นบล็อกละ 512 บิตและให้ไดเจสต์ขนาด 128 บิต ซึ่งมักเขียนเป็นเลขฐานสิบหก 32 อักขระหรือ Base64 24 อักขระ อินพุตเดียวกันจะให้ไดเจสต์เดียวกันเสมอ และการเปลี่ยนอินพุตเพียงบิตเดียวจะทำให้บิตของเอาต์พุตเปลี่ยนไปประมาณครึ่งหนึ่ง
การแฮชเป็นกระบวนการทางเดียว ไม่มีคีย์และไม่มีวิธี “ถอดรหัส” แฮช MD5 กลับเป็นอินพุต เว็บไซต์ที่อ้างว่าย้อนกลับ MD5 ได้ แท้จริงแล้วเพียงค้นหาแฮชในตารางขนาดมหึมาที่เก็บแฮชของคำทั่วไปและรหัสผ่านที่รั่วไหล นี่คือเหตุผลที่ MD5 แบบไม่ใช้ salt ของรหัสผ่านสั้น ๆ มักถูกค้นเจอได้ในไม่กี่วินาที
MD5 ยังปลอดภัยอยู่หรือไม่
ไม่ปลอดภัยเมื่อต้องรับมือกับผู้โจมตี ในปี 2004 Xiaoyun Wang และคณะได้เผยแพร่วิธีสร้างการชนกัน (collision) ที่ทำได้จริง คืออินพุตสองชุดที่ต่างกันแต่ให้ MD5 เดียวกัน จากนั้นการชนกันแบบเลือกส่วนนำหน้า (chosen-prefix) ก็ตามมา นักวิจัยใช้เทคนิคนี้สร้างใบรับรอง CA ปลอมในปี 2008 และในปี 2012 มัลแวร์ Flame ก็ใช้เทคนิคเดียวกันปลอมใบรับรองที่ทำให้โค้ดของมันดูเหมือนได้รับการลงนามโดย Microsoft ปัจจุบันแล็ปท็อปธรรมดาเครื่องหนึ่งหาการชนกันของ MD5 ได้ในไม่กี่วินาที และ RFC 6151 ระบุว่า MD5 ใช้ไม่ได้อีกต่อไปในงานที่ต้องการความทนทานต่อการชนกัน เช่น ลายเซ็นดิจิทัล
อย่างไรก็ตาม MD5 ยังใช้เป็นเช็กซัมเพื่อตรวจจับความเสียหายที่เกิดโดยไม่ตั้งใจได้ดี เช่น การดาวน์โหลดที่ไม่สมบูรณ์หรือบิตบนดิสก์ที่ค่าพลิกกลับ รวมถึงใช้เป็นคีย์แคชหรือใช้ตัดข้อมูลซ้ำในข้อมูลที่เชื่อถือได้ แต่เมื่อไฟล์หรือเช็กซัมของไฟล์อาจมาจากผู้โจมตี ให้ใช้ SHA-256 แทน
เลขฐานสิบหก, Base64 และแฮชที่ไม่ตรงกัน
โดยปกติ MD5 จะแสดงเป็นเลขฐานสิบหก ซึ่งเป็นรูปแบบที่ md5sum แสดงผล แต่บางโปรโตคอลจะส่งไบต์ดิบ 16 ไบต์ในรูป Base64 แทน เช่น ส่วนหัว HTTP Content-MD5 ที่ API ของบริการจัดเก็บข้อมูลบนคลาวด์อย่าง Amazon S3 ใช้ ให้เลือกเอาต์พุตเป็น Base64 หรือแปลงค่าที่มีอยู่แล้วด้วย Hex เป็น Base64
หาก MD5 ของคุณต่างจากของเครื่องมืออื่น แปลว่าไบต์ของอินพุตต่างกัน สาเหตุที่พบบ่อยคืออักขระขึ้นบรรทัดใหม่ต่อท้าย การจบบรรทัดแบบ Windows หรือการเข้ารหัสอักขระที่ต่างกัน เช่น "café" มีขนาด 5 ไบต์ใน UTF-8 แต่มีเพียง 4 ไบต์ใน ISO-8859-1 แฮชทั้งสองจึงไม่มีส่วนใดเหมือนกันเลย
$ echo "hello" | md5sum # แฮช "hello\n"
b1946ac92492d2347c6235b4d2611184 -
$ printf 'hello' | md5sum # แฮช "hello"
5d41402abc4b2a76b9719d911017c592 -
MD5 ในบรรทัดคำสั่งและในโค้ด
md5sum file.iso # Linux
md5 file.iso # macOS
certutil -hashfile file.iso MD5 # Windows
Get-FileHash file.iso -Algorithm MD5 # PowerShell
# Python
import hashlib
hashlib.md5('hello'.encode('utf-8')).hexdigest()
// Node.js
require('crypto').createHash('md5').update('hello', 'utf8').digest('hex')
Web Crypto API ที่มีอยู่ในเบราว์เซอร์ไม่รองรับ MD5 หน้านี้จึงคำนวณ MD5 ด้วย JavaScript บนอุปกรณ์ของคุณ โดยไม่มีการอัปโหลดข้อมูลใด ๆ ตาราง “อัลกอริทึมทั้งหมด” ใต้ผลลัพธ์จะแสดง SHA-1, SHA-256, SHA-384, SHA-512, CRC-32 และ CRC-32C ของอินพุตเดียวกัน
ตัวอย่าง
| อินพุต (UTF-8) | MD5 |
|---|---|
Hello, World! | 65a8e27d8879283831b664bd8b7f0ad4 |
Base64.is | 2e3c0e8b828164a8db7f62146ca87e14 |
你好 | 7eca689f0d3389d9dea66ae112e5cfd7 |
คำถามที่พบบ่อย
ถอดรหัสแฮช MD5 ได้หรือไม่
MD5 เพียงพอสำหรับตรวจสอบไฟล์ที่ดาวน์โหลดหรือไม่
MD5 ตรวจจับความเสียหายที่เกิดโดยไม่ตั้งใจได้อย่างน่าเชื่อถือ แต่เนื่องจากการสร้างการชนกันมีต้นทุนต่ำ ผู้ที่เตรียมไฟล์ไว้ล่วงหน้าจึงสร้างไฟล์ที่สองซึ่งมีเนื้อหาต่างกันแต่มี MD5 เดียวกันได้ สำหรับไฟล์ดาวน์โหลดที่เกี่ยวข้องกับความปลอดภัย ให้ตรวจสอบแฮช SHA-256 จากแหล่งที่เชื่อถือได้หรือตรวจสอบลายเซ็น
แฮช MD5 ยาวเท่าใด
== สตริงเลขฐานสิบหก 32 อักขระอาจเป็น MD4 หรือแฮช NTLM ก็ได้ เครื่องมือระบุชนิดแฮชจะแสดงรายการอัลกอริทึมที่เป็นไปได้หาค่า MD5 ของไฟล์ขนาดใหญ่ได้หรือไม่
md5sum หรือ certutil