เครื่องสร้าง Hash MD5
สร้าง hash MD5 จากข้อความใด ๆ
ข้อความป้อนเข้า
Hash MD5
Hash MD5 จะแสดงที่นี่…
MD5 Hashing คืออะไร?
MD5 (Message-Digest Algorithm 5) เป็นฟังก์ชัน hash แบบ cryptographic ที่สร้าง digest ขนาดคงที่ 128 บิต (16 bytes) จากอินพุตใด ๆ ไม่ว่าจะมีขนาดเท่าใด เผยแพร่ในปี 1992 โดย Ronald Rivest ในฐานะ RFC 1321 MD5 ถูกออกแบบมาเพื่อเป็นตัวต่อจาก MD4 ที่เร็วกว่า และกลายเป็นหนึ่งในฟังก์ชัน hash ที่ใช้แพร่หลายที่สุดบนอินเทอร์เน็ต อัลกอริทึมประมวลผลอินพุตเป็นบล็อก 512 บิตผ่านสี่รอบ รอบละ 16 การดำเนินการ โดยใช้ฟังก์ชัน nonlinear คนละตัวในแต่ละรอบ เพื่อสร้าง fingerprint เป็นเลขฐานสิบหก 32 ตัวอักษร
ฟังก์ชัน hash เป็นการแปลงทางเดียว: จากอินพุตคุณสามารถคำนวณ hash ได้ทันที แต่จาก hash เพียงอย่างเดียว คุณไม่สามารถกู้คืนอินพุตต้นฉบับได้ แม้แต่การเปลี่ยนแปลงอินพุตเพียงหนึ่งบิตก็จะทำให้ digest แตกต่างออกไปโดยสิ้นเชิง — คุณสมบัตินี้เรียกว่า avalanche effect MD5 แมปพื้นที่อินพุตอันไม่จำกัดไปยังพื้นที่เอาต์พุตขนาดคงที่ 128 บิต ดังนั้น collision (อินพุตสองตัวที่ต่างกันแต่ได้ hash เดียวกัน) มีอยู่ตามหลักคณิตศาสตร์อย่างแน่นอน แต่ฟังก์ชัน hash ที่ปลอดภัยต้องทำให้การค้นหา collision นั้นไม่คุ้มค่าในเชิงการคำนวณ
ตั้งแต่ปี 2004 นักวิจัยได้พิสูจน์การโจมตี collision จริงต่อ MD5 ซึ่งหมายความว่าอัลกอริทึมนี้ไม่ถือว่าปลอดภัยสำหรับลายเซ็นดิจิทัล ใบรับรอง หรือบริบทใด ๆ ที่ต้องการ collision resistance อย่างไรก็ตาม MD5 ยังคงถูกใช้งานอย่างแพร่หลายสำหรับวัตถุประสงค์ที่ไม่ใช่ด้านความปลอดภัย ได้แก่ การตรวจสอบความสมบูรณ์ของไฟล์หลังการดาวน์โหลด การสร้าง cache key การลดข้อมูลซ้ำซ้อน และการสร้าง identifier แบบกำหนดตายตัวจากสตริง สำหรับการใช้งานเหล่านี้ ความเร็วของอัลกอริทึมและการรองรับของไลบรารีที่แพร่หลายทำให้เป็นตัวเลือกที่ปฏิบัติได้จริง ในปี 2008 Marc Stevens และเพื่อนร่วมงานได้เผยแพร่การโจมตี chosen-prefix collision ซึ่งหมายความว่าผู้โจมตีสามารถสร้างเอกสารสองชิ้นที่มี prefix ที่กำหนดเองและได้ digest เดียวกัน เทคนิคนี้ได้รับการพิสูจน์ในงาน Chaos Communication Congress ปี 2008 โดยการสร้างใบรับรอง Certification Authority ปลอม มัลแวร์ Flame ปี 2012 ต่อมาได้ใช้ chosen-prefix collision เพื่อปลอมใบรับรองลายเซ็นโค้ดของ Microsoft ทำให้มัลแวร์ปลอมตัวเป็นแพ็คเกจ Windows Update ที่ถูกต้อง การโจมตีในโลกจริงเหล่านี้ยืนยันว่าอัลกอริทึมนี้ถูกทำลายทาง cryptographic สำหรับการใช้งานที่ต้องพึ่งพาความน่าเชื่อถือ และไม่ควรใช้ในสถานการณ์ที่ผู้โจมตีสามารถมีอิทธิพลต่ออินพุตที่จะถูก hash
ทำไมถึงใช้เครื่องมือสร้าง MD5 นี้?
สร้าง hash MD5 ได้ทันทีโดยไม่ต้องติดตั้งอะไรหรือเขียนโค้ด วาง text แล้วรับ hex digest 32 ตัวอักษรแบบ real-time
กรณีการใช้งาน MD5
MD5 เทียบกับอัลกอริทึม Hash อื่น
MD5 เป็นอัลกอริทึม hash ที่เร็วที่สุดและให้ผลลัพธ์สั้นที่สุดในบรรดาอัลกอริทึม hash ทั่วไป แต่มีการรับประกันความปลอดภัยที่อ่อนแอที่สุด ตารางด้านล่างเปรียบเทียบขนาด digest มาตรฐาน และกรณีการใช้งานที่เหมาะสมของแต่ละอัลกอริทึม
| อัลกอริทึม | ขนาด Digest | ความยาว Hex | มาตรฐาน | เหมาะสำหรับ |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
MD5 ทำงานอย่างไร
MD5 ประมวลผลอินพุตผ่านโครงสร้าง Merkle-Damgard: ข้อความถูก pad ให้เป็นทวีคูณของ 512 บิต แบ่งเป็นบล็อก และแต่ละบล็อกผ่านสี่รอบของ 16 การดำเนินการ bitwise ที่ผสมอินพุตกับค่าคงที่ที่มาจาก sine ผลลัพธ์คือ state 128 บิตที่กลายเป็น digest สุดท้าย
แต่ละรอบใช้ฟังก์ชัน auxiliary nonlinear ที่แตกต่างกันกับสามใน 32-bit state word สี่ตัว (A, B, C, D) รอบ 1 ใช้ F(B,C,D) = (B AND C) OR (NOT B AND D) — ตัวเลือกแบบ bitwise conditional รอบ 2 ใช้ G(B,C,D) = (B AND D) OR (C AND NOT D) — ตัวเลือกแบบ complementary รอบ 3 ใช้ H(B,C,D) = B XOR C XOR D — ฟังก์ชัน parity รอบ 4 ใช้ I(B,C,D) = C XOR (B OR NOT D) — ตัวรวมแบบ asymmetric ฟังก์ชันทั้งสี่นี้ทำให้ทุกบิตของอินพุตมีอิทธิพลต่อ output digest สร้าง avalanche effect ที่ทำให้การเปลี่ยนแปลงอินพุตเล็กน้อยทำให้เกิดการเปลี่ยนแปลงที่คาดเดาไม่ได้อย่างมากต่อ hash ที่ได้
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
อัลกอริทึมดำเนินการใน 5 ขั้นตอน: (1) ต่อบิต 1 แล้วเติมศูนย์จนกระทั่งความยาวข้อความเป็น 448 mod 512; (2) ต่อความยาวข้อความต้นฉบับเป็นจำนวนเต็ม little-endian ขนาด 64 บิต; (3) กำหนดค่าเริ่มต้นตัวแปร state 32 บิตสี่ตัว (A, B, C, D) ด้วยค่าคงที่ที่กำหนดไว้; (4) ประมวลผลแต่ละบล็อก 512 บิตผ่าน 64 การดำเนินการโดยใช้ฟังก์ชัน nonlinear สี่ตัว (F, G, H, I) ตัวละหนึ่งรอบ รอบละ 16 การดำเนินการ; (5) บวก state ที่ได้กับ state สะสมและเอาต์พุต hash 128 บิตสุดท้ายตามลำดับ byte แบบ little-endian
ตัวอย่างโค้ด
วิธีสร้าง hash MD5 ในภาษาและสภาพแวดล้อมยอดนิยม หมายเหตุ: MD5 ไม่มีใน browser Web Crypto API — ใช้ไลบรารีหรือ Node.js
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3