แฮช MD5
เครื่องมือแฮช MD5 ออนไลน์ฟรี โหมดข้อความ/ไฟล์/ชุด/HMAC-MD5, UTF-8/Latin1, ตัวพิมพ์ใหญ่, จัดกลุ่ม 8 ตัวอักษร ⚠️ MD5 ถูกบุกรุก — ห้ามใช้สำหรับจัดเก็บรหัสผ่าน
เครื่องมือแฮช MD5 ออนไลน์ฟรี โหมดข้อความ/ไฟล์/ชุด/HMAC-MD5, UTF-8/Latin1, ตัวพิมพ์ใหญ่, จัดกลุ่ม 8 ตัวอักษร ⚠️ MD5 ถูกบุกรุก — ห้ามใช้สำหรับจัดเก็บรหัสผ่าน
MD5 มักใช้สำหรับตรวจสอบความสมบูรณ์ของไฟล์ (เช่น ตรวจสอบการดาวน์โหลด) สร้างไดเจสต์อย่างรวดเร็ว ความเข้ากันได้กับระบบเก่า คีย์แคช และขจัดข้อมูลซ้ำในสถานการณ์ที่ไม่เกี่ยวกับความปลอดภัย MD5 สร้าง 128 บิต (32 ตัวอักษรฐานสิบหก) และเร็วมาก เหมาะสำหรับสถานการณ์การตรวจสอบที่ไม่สำคัญ
MD5 สร้าง 128 บิต (32 hex) เร็วมากแต่ถูกบุกรุก; SHA-256 สร้าง 256 บิต (64 hex) ช้ากว่าแต่ไม่มีการโจมตีด้วยการชนกันในทางปฏิบัติและเป็นที่นิยมสำหรับแอปพลิเคชันสำคัญ
เครื่องมือ SHA-256MD5 เร็วมาก — GPU สมัยใหม่สามารถคำนวณแฮชได้หลายพันล้านครั้งต่อวินาที และตารางสีรุ้งทำลายรหัสผ่านทั่วไปทันที ใช้ bcrypt, scrypt หรือ Argon2 สำหรับจัดเก็บรหัสผ่าน
เครื่องมือสร้างรหัสผ่านไม่ได้อย่างแน่นอนสำหรับความปลอดภัย (ลายเซ็นดิจิทัล รหัสผ่าน TLS) แต่สำหรับแอปพลิเคชันที่ไม่เกี่ยวกับความปลอดภัย (ตรวจสอบความเสียหายไฟล์ ขจัดข้อมูลซ้ำ คีย์แคช) MD5 ยังเหมาะสม เนื่องจากผู้โจมตีไม่มีแรงจูงใจในการสร้างการชนกัน
MD5 เป็นฟังก์ชันทางเดียวและไม่สามารถย้อนกลับได้ทางคณิตศาสตร์ แต่ตารางสีรุ้งและการโจมตีแบบเดรัจฉานสามารถกู้คืนรหัสผ่านอ่อนแอภายในไม่กี่วินาที นั่นคือเหตุผลที่ MD5 ไม่ควรถูกใช้สำหรับจัดเก็บรหัสผ่าน
ไม่ เครื่องมือใช้การอ่านแบบเพิ่มทีละส่วน — ไฟล์จะไม่ถูกโหลดทั้งหมดลงในหน่วยความจำ ดังนั้นแม้แต่ไฟล์ขนาดหลายกิกะไบต์ก็ถูกประมวลผลอย่างราบรื่นด้วยอินเทอร์เฟซที่ตอบสนอง
HMAC-MD5 เป็นแฮชที่มีคีย์ซึ่งต้องการคีย์ลับ แม้ว่า MD5 ธรรมดาจะถูกบุกรุก แต่ HMAC-MD5 ยังคงปลอดภัยเมื่อคีย์ไม่เป็นที่ทราบ (แม้ว่าจะแนะนำให้ย้ายไปใช้ HMAC-SHA256 ก็ตาม)
เครื่องมือสร้าง HMACMD5 (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 อีกต่อไป) การคำนวณทั้งหมดทำในเครื่องในเบราว์เซอร์ของคุณ — ไฟล์ใช้การอ่านแบบเพิ่มทีละส่วนและไม่เคยถูกอัปโหลดไปยังเซิร์ฟเวอร์
| อัลกอริทึม | บิตเอาต์พุต | ความยาว Hex | ความปลอดภัย | ความเร็ว | การใช้งานที่แนะนำ |
|---|---|---|---|---|---|
MD5 | 128 บิต | 32 ตัวอักษร | ❌ ถูกบุกรุก (การชนกัน/พรีอิมเมจ) | เร็วมาก | เช็คซัมไฟล์ ขจัดข้อมูลซ้ำ คีย์แคช |
SHA-1 | 160 บิต | 40 ตัวอักษร | ❌ การชนกัน (2017) | เร็ว | Git ความเข้ากันได้กับระบบเก่า |
SHA-256 | 256 บิต | 64 ตัวอักษร | ✅ ปลอดภัย | ปานกลาง | ลายเซ็นดิจิทัล ใบรับรอง บล็อกเชน |
SHA-512 | 512 บิต | 128 ตัวอักษร | ✅ ปลอดภัย | เร็ว (64-บิต) | สถานการณ์ความปลอดภัยสูง การหาคีย์ |
bcrypt | - | 60 ตัวอักษร | ✅ เฉพาะสำหรับรหัสผ่าน | ช้า (ปรับได้) | จัดเก็บรหัสผ่าน |
| ปี | เหตุการณ์ | ผลกระทบ |
|---|---|---|
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 (ความต้านทานพรีอิมเมจ) ถูกทำลาย |
// 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); // b10a8db164e0754105b7a99be72e3fe5import 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)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")