แฮช MD5
เครื่องมือแฮช MD5 ออนไลน์ฟรี โหมดข้อความ/ไฟล์/ชุด/HMAC-MD5, UTF-8/Latin1, ตัวพิมพ์ใหญ่, จัดกลุ่ม 8 ตัวอักษร ⚠️ MD5 ถูกบุกรุก — ห้ามใช้สำหรับจัดเก็บรหัสผ่าน
คำแนะนำที่เกี่ยวข้อง
MD5 คืออะไร?
MD5 (Message-Digest Algorithm 5) เป็นฟังก์ชันแฮช 128 บิตที่ออกแบบโดย Ronald Rivest ในปี 1991 (RFC 1321) ซึ่งสร้างไดเจสต์ฐานสิบหก 32 ตัวอักษรคงที่จากอินพุตตามอำเภอใจ เคยใช้กันอย่างแพร่หลายสำหรับลายเซ็นดิจิทัล การตรวจสอบใบรับรองและการจัดเก็บรหัสผ่าน MD5 ถูกบุกรุกโดยการโจมตีด้วยการชนกันของ Wang และคณะในปี 2004 และมัลแวร์ Flame ใช้ประโยชน์จากการชนกันของ MD5 เพื่อปลอมใบรับรอง CA ที่น่าเชื่อถือในปี 2008
**สถานะความปลอดภัย**: NIST ปฏิเสธ MD5 อย่างเป็นทางการสำหรับลายเซ็นดิจิทัลใน SP 800-131A (2011) อย่างไรก็ตาม MD5 ยังคงมีประโยชน์สำหรับสถานการณ์ที่ไม่เกี่ยวกับความปลอดภัย: การตรวจสอบความสมบูรณ์ของไฟล์เพื่อป้องกันความเสียหายแบบสุ่ม การขจัดข้อมูลซ้ำและคีย์แคช คำถามสำคัญคือ ผู้โจมตีจะได้รับประโยชน์จากการสร้างการชนกันหรือไม่? หากไม่ ความเร็วของ MD5 เป็นข้อได้เปรียบ
**ห้ามใช้ MD5 สำหรับจัดเก็บรหัสผ่าน**: MD5 เร็วมาก (หลายพันล้านแฮช/วินาทีบน GPU) ซึ่งช่วยให้รหัสผ่านทั่วไปถูกทำลายทันทีด้วยการโจมตีแบบเดรัจฉาน การจัดเก็บรหัสผ่านต้องใช้ bcrypt, scrypt หรือ Argon2 — แฮชที่ช้าพร้อมปัจจัยต้นทุนที่ปรับได้ซึ่งทำให้การโจมตีแบบเดรัจฉานไม่สามารถปฏิบัติได้
**HMAC-MD5 ยังคงปลอดภัย**: แม้ว่า MD5 ธรรมดาจะถูกบุกรุก แต่ HMAC-MD5 (รหัสตรวจสอบความถูกต้องของข้อความตามแฮชที่มีคีย์) ยังคงปลอดภัยเมื่อคีย์ไม่เป็นที่ทราบ เนื่องจากโครงสร้าง HMAC ไม่ได้ขึ้นอยู่โดยตรงกับความต้านทานการชนกันของแฮชพื้นฐาน อย่างไรก็ตาม แนะนำให้ย้ายไปใช้ HMAC-SHA256
เครื่องมือนี้ใช้การติดตั้ง MD5 ด้วย JavaScript บริสุทธิ์ (Web Crypto API ไม่รองรับ MD5 อีกต่อไป) การคำนวณทั้งหมดทำในเครื่องในเบราว์เซอร์ของคุณ — ไฟล์ใช้การอ่านแบบเพิ่มทีละส่วนและไม่เคยถูกอัปโหลดไปยังเซิร์ฟเวอร์
กรณีการใช้งาน
- ความสมบูรณ์ของไฟล์: คำนวณ MD5 หลังจากดาวน์โหลดเพื่อเปรียบเทียบกับเช็คซัมทางการ
- สร้างไดเจสต์แบบชุดสำหรับไฟล์คอนฟิกูเรชันหรือบันทึกประจำรุ่น
- การเซ็นชื่อ HMAC-MD5 สำหรับการรวมระบบเก่า
- ขจัดข้อมูลซ้ำผ่านการเปรียบเทียบ MD5 อย่างรวดเร็ว
- สร้างคีย์แคชเป็นตัวระบุเฉพาะที่สั้น
- การศึกษา: ทำความเข้าใจอัลกอริทึมแฮชโดยเปรียบเทียบเอาต์พุต MD5/SHA-1/SHA-256
วิธีการใช้งาน
- เลือกโหมด: ข้อความ ไฟล์ ชุดหรือ HMAC-MD5
- กำหนดค่าตัวเลือก: การเข้ารหัส ตัวพิมพ์ใหญ่ จัดกลุ่ม 8 ตัวอักษร
- ป้อนข้อความ อัปโหลดไฟล์หรือวางเนื้อหาแบบชุด
- คัดลอกผลลัพธ์แฮชสำหรับการตรวจสอบหรือสคริปต์
คุณสมบัติ
- 4 โหมด: ข้อความ ไฟล์ แบบชุดตามบรรทัดและ HMAC-MD5 ครอบคลุมสถานการณ์เช็คซัมทั่วไป
- การเข้ารหัส UTF-8/Latin1 ที่เลือกได้สำหรับอินพุตระบบต่างๆ
- แสดงตัวพิมพ์ใหญ่และจัดกลุ่ม 8 ตัวอักษรเพื่อความอ่านง่าย
- แฮชไฟล์แบบแบ่งส่วน: การอ่านแบบเพิ่มทีละส่วนสำหรับไฟล์ขนาดใหญ่ป้องกันปัญหาหน่วยความจำ
- โหมดชุด: แต่ละบรรทัดถูกแฮชอย่างอิสระพร้อมเอาต์พุต ดั้งเดิม→แฮช
- คัดลอกผลลัพธ์ด้วยคลิกเดียว
ตัวอย่างโค้ด
MD5/Hashing in JavaScript (Web Crypto supports SHA, MD5 needs library)
// Note: Web Crypto API does NOT support MD5 (deprecated)
// Use SHA-256 instead for new projects
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2,'0')).join('');
}
sha256('Hello World').then(console.log);
// MD5 in Node.js using crypto module
const crypto = require('crypto');
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // b10a8db164e0754105b7a99be72e3fe5MD5 Hashing in Python
import hashlib
text = 'Hello World'
md5_hash = hashlib.md5(text.encode('utf-8')).hexdigest()
print(md5_hash) # b10a8db164e0754105b7a99be72e3fe5
# File MD5 (chunked for large files)
def md5_file(filepath, chunk_size=8192):
md5 = hashlib.md5()
with open(filepath, 'rb') as f:
while chunk := f.read(chunk_size):
md5.update(chunk)
return md5.hexdigest()
# HMAC-MD5
import hmac
hmac_md5 = hmac.new(b'secret-key', b'Hello World', hashlib.md5).hexdigest()
print(hmac_md5)MD5 Hashing in Java
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
public class MD5Example {
public static String md5(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hash) sb.append(String.format("%02x", b));
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(md5("Hello World"));
// b10a8db164e0754105b7a99be72e3fe5
}
}
// Note: Use SHA-256 for new code: MessageDigest.getInstance("SHA-256")คำถามที่พบบ่อย
MD5 มักใช้ทำอะไร?
MD5 มักใช้สำหรับตรวจสอบความสมบูรณ์ของไฟล์ (เช่น ตรวจสอบการดาวน์โหลด) สร้างไดเจสต์อย่างรวดเร็ว ความเข้ากันได้กับระบบเก่า คีย์แคช และขจัดข้อมูลซ้ำในสถานการณ์ที่ไม่เกี่ยวกับความปลอดภัย MD5 สร้าง 128 บิต (32 ตัวอักษรฐานสิบหก) และเร็วมาก เหมาะสำหรับสถานการณ์การตรวจสอบที่ไม่สำคัญ
MD5 เทียบกับ SHA-256?
MD5 สร้าง 128 บิต (32 hex) เร็วมากแต่ถูกบุกรุก; SHA-256 สร้าง 256 บิต (64 hex) ช้ากว่าแต่ไม่มีการโจมตีด้วยการชนกันในทางปฏิบัติและเป็นที่นิยมสำหรับแอปพลิเคชันสำคัญ
เครื่องมือ SHA-256เหตุใด MD5 จึงไม่ปลอดภัยสำหรับรหัสผ่าน?
MD5 เร็วมาก — GPU สมัยใหม่สามารถคำนวณแฮชได้หลายพันล้านครั้งต่อวินาที และตารางสีรุ้งทำลายรหัสผ่านทั่วไปทันที ใช้ bcrypt, scrypt หรือ Argon2 สำหรับจัดเก็บรหัสผ่าน
เครื่องมือสร้างรหัสผ่านMD5 ถูกบุกรุก — ฉันยังสามารถใช้งานได้ไหม?
ไม่ได้อย่างแน่นอนสำหรับความปลอดภัย (ลายเซ็นดิจิทัล รหัสผ่าน TLS) แต่สำหรับแอปพลิเคชันที่ไม่เกี่ยวกับความปลอดภัย (ตรวจสอบความเสียหายไฟล์ ขจัดข้อมูลซ้ำ คีย์แคช) MD5 ยังเหมาะสม เนื่องจากผู้โจมตีไม่มีแรงจูงใจในการสร้างการชนกัน
แฮช MD5 สามารถ 'ถอดรหัส' ได้หรือไม่?
MD5 เป็นฟังก์ชันทางเดียวและไม่สามารถย้อนกลับได้ทางคณิตศาสตร์ แต่ตารางสีรุ้งและการโจมตีแบบเดรัจฉานสามารถกู้คืนรหัสผ่านอ่อนแอภายในไม่กี่วินาที นั่นคือเหตุผลที่ MD5 ไม่ควรถูกใช้สำหรับจัดเก็บรหัสผ่าน
ไฟล์ขนาดใหญ่จะทำให้ค้างหรือไม่?
ไม่ เครื่องมือใช้การอ่านแบบเพิ่มทีละส่วน — ไฟล์จะไม่ถูกโหลดทั้งหมดลงในหน่วยความจำ ดังนั้นแม้แต่ไฟล์ขนาดหลายกิกะไบต์ก็ถูกประมวลผลอย่างราบรื่นด้วยอินเทอร์เฟซที่ตอบสนอง
HMAC-MD5 คืออะไรเมื่อเปรียบเทียบกับ MD5 ธรรมดา?
HMAC-MD5 เป็นแฮชที่มีคีย์ซึ่งต้องการคีย์ลับ แม้ว่า MD5 ธรรมดาจะถูกบุกรุก แต่ HMAC-MD5 ยังคงปลอดภัยเมื่อคีย์ไม่เป็นที่ทราบ (แม้ว่าจะแนะนำให้ย้ายไปใช้ HMAC-SHA256 ก็ตาม)
เครื่องมือสร้าง HMACอภิธานศัพท์
- ฟังก์ชันแฮช (Hash Function)
- ฟังก์ชันทางคณิตศาสตร์ที่จับคู่อินพุตความยาวตามอำเภอใจกับเอาต์พุตความยาวคงที่ ฟังก์ชันแฮชที่ดีให้การทำงานทางเดียว ความต้านทานต่อการชนกันและเอฟเฟกต์ถล่ม
- การโจมตีด้วยการชนกัน (Collision Attack)
- การค้นหาอินพุตที่แตกต่างกันสองอย่างที่สร้างเอาต์พุตแฮชเดียวกัน การชนกันของ MD5 ถูกสาธิตโดย Wang และคณะในปี 2004 ซึ่งทำให้สามารถปลอมลายเซ็นดิจิทัลได้
- การโจมตีพรีอิมเมจ (Preimage Attack)
- การค้นหาอินพุตที่สร้างเอาต์พุตแฮชที่กำหนด ยากกว่าการชนกัน แต่งานวิจัยใหม่ในปี 2024 ได้ทำให้ความต้านทานพรีอิมเมจของ MD5 อ่อนแอลงอย่างมาก
- ตารางสีรุ้ง (Rainbow Table)
- ตารางค้นหาแฮช→ข้อความธรรมดาที่คำนวณล่วงหน้าเพื่อทำลายแฮชรหัสผ่านอ่อนแออย่างรวดเร็ว Salt เอาชนะตารางสีรุ้ง
- HMAC (Hash-based Message Authentication Code)
- รหัสตรวจสอบความถูกต้องของข้อความตามแฮชที่ใช้คีย์ลับสำหรับความสมบูรณ์/การตรวจสอบสิทธิ์ของข้อความ HMAC-MD5 และ HMAC-SHA256 เป็นรูปแบบทั่วไปเครื่องมือสร้าง HMAC
- bcrypt
- อัลกอริทึมแฮชรหัสผ่านที่ช้าพร้อม salt ในตัวและปัจจัยต้นทุนที่ปรับได้ ทำให้การโจมตีแบบเดรัจฉานมีต้นทุนสูงมาก
- เช็คซัม (Checksum)
- ค่าคงที่ขนาดเล็กที่ใช้ตรวจสอบความสมบูรณ์ของข้อมูล MD5, SHA-1, SHA-256 มักใช้เป็นเช็คซัมเพื่อตรวจจับความเสียหายระหว่างการส่ง
- เอฟเฟกต์ถล่ม (Avalanche Effect)
- การเปลี่ยนแปลงเล็กน้อยในอินพุต (แม้แต่ 1 บิต) ทำให้เกิดการเปลี่ยนแปลงอย่างมากและไม่สามารถคาดเดาได้ในเอาต์พุตแฮช MD5 ยังคงมีคุณสมบัติถล่มที่ดี ซึ่งมีส่วนต่อประโยชน์ที่ยังคงอยู่ในการตรวจสอบที่ไม่เกี่ยวกับความปลอดภัย
- RFC 1321
- มาตรฐานทางการของ MD5 เสนอต่อ IETF โดย Ronald Rivest ในปี 1992 อธิบายขั้นตอนอัลกอริทึมและเวกเตอร์ทดสอบ
- แฮชแบบแบ่งส่วน (Chunked Hashing)
- การประมวลผลไฟล์ขนาดใหญ่เป็นบล็อกแทนที่จะโหลดทั้งไฟล์ลงในหน่วยความจำ พร้อมการอัปเดตสถานะแฮชแบบเพิ่มทีละส่วน
การเปรียบเทียบอัลกอริทึมแฮชทั่วไป
| อัลกอริทึม | บิตเอาต์พุต | ความยาว Hex | ความปลอดภัย | ความเร็ว | การใช้งานที่แนะนำ |
|---|---|---|---|---|---|
MD5 | 128 บิต | 32 ตัวอักษร | ❌ ถูกบุกรุก (การชนกัน/พรีอิมเมจ) | เร็วมาก | เช็คซัมไฟล์ ขจัดข้อมูลซ้ำ คีย์แคช |
SHA-1 | 160 บิต | 40 ตัวอักษร | ❌ การชนกัน (2017) | เร็ว | Git ความเข้ากันได้กับระบบเก่า |
SHA-256 | 256 บิต | 64 ตัวอักษร | ✅ ปลอดภัย | ปานกลาง | ลายเซ็นดิจิทัล ใบรับรอง บล็อกเชน |
SHA-512 | 512 บิต | 128 ตัวอักษร | ✅ ปลอดภัย | เร็ว (64-บิต) | สถานการณ์ความปลอดภัยสูง การหาคีย์ |
bcrypt | - | 60 ตัวอักษร | ✅ เฉพาะสำหรับรหัสผ่าน | ช้า (ปรับได้) | จัดเก็บรหัสผ่าน |
เส้นเวลาเหตุการณ์ความปลอดภัย MD5
| ปี | เหตุการณ์ | ผลกระทบ |
|---|---|---|
1991 | Ron Rivest ออกแบบ MD5 (RFC 1321) | ทดแทน MD4 และกลายเป็นอัลกอริทึมแฮชมาตรฐาน |
1996 | พบข้อบกพร่องการชนกันเทียมครั้งแรกใน MD5 | ชุมชนวิชาการแสดงความกังวล |
2004 | ทีมของ Wang Xiaoyun สาธิตการโจมตีด้วยการชนกัน MD5 | ความปลอดภัยลายเซ็นดิจิทัล MD5 แตกอย่างสมบูรณ์ |
2008 | มัลแวร์ Flame ปลอมใบรับรอง CA ผ่านการชนกัน MD5 | NIST ปฏิเสธ MD5 อย่างเป็นทางการสำหรับลายเซ็นดิจิทัล |
2011 | NIST SP 800-131A ห้ามใช้ MD5 อย่างเป็นทางการสำหรับวัตถุประสงค์ด้านความปลอดภัย | ระบบรัฐบาลสหรัฐฯ เลิกใช้ MD5 ทีละขั้น |
2024 | เผยแพร่บทความการโจมตีพรีอิมเมจใหม่ | เส้นป้องกันสุดท้ายของ MD5 (ความต้านทานพรีอิมเมจ) ถูกทำลาย |
Authoritative References
- เปรียบเทียบข้อความอย่างปลอดภัย
- การแปลงเลขฐานสอง
- รหัสซีซาร์ (Caesar Cipher)
- ตัวแปลงรหัสมอร์ส
- เลขฐานสิบหก (Hex)
- วิดีโอเป็น Base64
- Base64 เป็นวิดีโอ
- แปลงรูปภาพเป็น Base64
- Base64 เป็นรูปภาพ
- แปลงข้อความเป็น Base64
- Base64 เป็นข้อความ
- ตัวตรวจสอบแฮชไฟล์
- แปลงไฟล์เป็น Base64
- Base64 เป็นไฟล์
- แปลงเสียงเป็น Base64
- Base64 เป็นเสียง
- เข้ารหัสและถอดรหัส AES
- เข้ารหัสและถอดรหัส DES
- ตัวเข้ารหัสและถอดรหัส Base32
- Base58 การเข้ารหัสและถอดรหัส
- การเข้ารหัส Base64
- ถอดรหัส Base64
- เปรียบเทียบ Base64
- แยก Base64
- รวม Base64 หลายบรรทัด
- การจัดรูปแบบ Base64
- ตรวจสอบรูปแบบ Base64
- เข้ารหัส Base64 แบบกลุ่ม
- ถอดรหัส Base64 หลายรายการ
- เครื่องมือล้าง Base64
- เครื่องมือจัดการ padding Base64
- สถิติความยาว Base64
- Base64 เป็น Hex
- ตัวแปลง Base64 DataURL
- ตัวแปลง Base64-Hex
- ตัวแปลงรหัส Base85
- สร้างและตรวจสอบ HMAC
- เครื่องมือสร้างคีย์ PBKDF2
- แฮช MD5
- แฮช SHA-256
- แฮช SHA-1
- แฮช SHA512
- ถอดรหัส ตรวจสอบ และสร้าง JWT
- เข้ารหัสและถอดรหัส HTML
- ตัวแปลงรหัส Unicode
- การเข้ารหัส URL
- URL Safe Base64
- MIME Base64
- ทำให้โค้ด Java อ่านยาก (Obfuscate)
- ทำให้โค้ด JS อ่านยาก (Obfuscate)
- ทำให้โค้ด PHP อ่านยาก (Obfuscate)
- ทำให้โค้ด Python อ่านยาก (Obfuscate)