แฮช/การเข้ารหัส

HMAC Generator

คำนวณ HMAC (Hash-based Message Authentication Code) ของข้อความหรือไฟล์ด้วยคีย์ลับ — พร้อมกันแปดอัลกอริทึม: MD5, SHA-1, SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-512, RIPEMD-160

HMAC (Hash-based Message Authentication Code) is a hash computed together with a secret key, proving a message hasn't changed and was sent by someone who knows that key. Unlike a plain hash, an HMAC can't be forged without knowing the secret.

How to use it

Common uses

Things to keep in mind

HMAC protects against tampering and confirms the sender's authenticity, but it doesn't encrypt the message itself — the content stays readable.

A mismatched HMAC is most often caused by different data encoding (e.g. JSON field order) or a stray whitespace or line break, not by a bug in the algorithm itself.

บทความเกี่ยวกับเครื่องมือนี้: HMAC: แฮชที่มีคีย์ต่างจากแฮชธรรมดาอย่างไร

คำถามที่พบบ่อย

HMAC ต่างจากแฮชธรรมดาอย่างไร?

แฮชธรรมดาพิสูจน์เพียงว่าข้อมูลไม่ถูกเปลี่ยนแปลง ส่วน HMAC ใช้คีย์ลับเพิ่มเติม จึงพิสูจน์ทั้งความถูกต้องและว่าผู้ส่งรู้ความลับที่ใช้ร่วมกัน — หากไม่มีคีย์ ใครก็ไม่สามารถสร้าง HMAC ที่ถูกต้องได้แม้จะรู้อัลกอริทึม

ควรเลือกอัลกอริทึมแฮชแบบไหนสำหรับ HMAC?

HMAC-SHA256 เป็นค่าเริ่มต้นที่ทันสมัยและมั่นคง ตัวเลือกเก่าอย่าง HMAC-MD5 หรือ HMAC-SHA1 ในฐานะ HMAC เองยังไม่ถูกเจาะ แต่แนะนำให้ใช้ SHA-256 ขึ้นไปสำหรับระบบใหม่

คีย์ลับของฉันถูกส่งไปที่ไหนหรือไม่?

ไม่ HMAC ถูกคำนวณทั้งหมดในเบราว์เซอร์ของคุณผ่าน Web Crypto API คีย์และข้อความจะไม่ออกจากอุปกรณ์ของคุณเลย

เหตุใดจึงไม่ควรเปรียบเทียบ HMAC ด้วยตัวดำเนินการเปรียบเทียบค่าเท่ากันแบบธรรมดา?

การเปรียบเทียบสตริงแบบธรรมดาจะหยุดทำงานทันทีที่พบความไม่ตรงกันแรก และเวลาที่ใช้จะเผยให้ผู้โจมตีรู้ว่าเขาเดาอักขระตัวแรก ๆ ถูกกี่ตัว (timing attack) จำเป็นต้องใช้ฟังก์ชันเปรียบเทียบแบบเวลาคงที่ เช่น hash_equals ใน PHP

สามารถใช้คีย์เดียวกันสำหรับหลายจุดประสงค์ที่แตกต่างกันได้หรือไม่?

ไม่แนะนำ หากคีย์ลับเดียวกันถูกใช้ทั้งสำหรับเซ็นชื่อ webhook และจุดประสงค์อื่น การถูกเจาะระบบหนึ่งจะทำให้ระบบอื่นถูกเจาะไปด้วยโดยอัตโนมัติ — ควรสร้างคีย์แยกต่างหากสำหรับแต่ละจุดประสงค์

บทความ: แฮช/การเข้ารหัส

Hash Generator: MD5, SHA-1 และ SHA-256 ต่างกันอย่างไร

เหตุใด MD5 จึงยังใช้ตรวจสอบความถูกต้องของไฟล์ แต่ไม่ใช้กับรหัสผ่าน

Checksum Verifier: วิธีตรวจสอบว่าไฟล์ไม่เสียหาย

เหตุใด checksum ที่ตรงกันจึงยืนยันความถูกต้องของไฟล์ แต่ไม่ยืนยันว่าใครเป็นผู้สร้าง

Bcrypt: เหตุใดรหัสผ่านจึงถูกแฮชอย่างช้า ๆ ไม่ใช่เร็ว

เหตุใด SHA-256 ที่เร็วจึงเป็นตัวเลือกที่แย่สำหรับรหัสผ่าน และ bcrypt ที่ช้าจึงเป็นตัวเลือกที่ถูกต้อง

UUID: ตัวระบุที่แทบไม่เคยซ้ำกันถูกสร้างขึ้นอย่างไร

เหตุใด UUID v4 จึงสามารถสร้างแยกกันได้บนเครื่องนับล้านเครื่องโดยไม่มีความเสี่ยงชนกัน

Password Generator: อะไรที่ทำให้รหัสผ่านแข็งแกร่งจริง ๆ

เหตุใดรหัสผ่านยาวที่ประกอบจากคำในพจนานุกรมจึงแข็งแกร่งกว่ารหัสผ่านสั้นที่มีสัญลักษณ์และตัวเลข

AES: การเข้ารหัสแบบสมมาตรทำงานอย่างไร

เหตุใดคีย์เดียวกันจึงเข้ารหัสและถอดรหัสข้อมูลใน AES และสิ่งนี้ต่างจากการเข้ารหัสแบบอสมมาตรอย่างไร

Argon2: เหตุใดอัลกอริทึมนี้จึงชนะการแข่งขันแฮชรหัสผ่าน

Argon2 ป้องกันการโจมตีด้วย GPU ได้ดีกว่าอัลกอริทึมแฮชรหัสผ่านรุ่นเก่าอย่างไร

Scrypt: เหตุใดอัลกอริทึมนี้จึงต้องการหน่วยความจำมากขนาดนั้น

เหตุใด scrypt จึงต้องการหน่วยความจำมากโดยตั้งใจเพื่อให้การเดารหัสบนอุปกรณ์ ASIC ยากขึ้น

TOTP: รหัสใช้ครั้งเดียวในแอปยืนยันตัวตนทำงานอย่างไร

เหตุใดรหัสใน Google Authenticator จึงทำงานได้โดยไม่มีอินเทอร์เน็ตและซิงค์กับเซิร์ฟเวอร์ผ่านเวลาเท่านั้น

PBKDF2: มาตรฐานการยืดคีย์ที่เก่าแก่ที่สุด

เหตุใดจำนวนรอบการวนซ้ำที่แนะนำสำหรับ PBKDF2 จึงเพิ่มขึ้นทุกปี

X.509: ภายในใบรับรอง SSL มีอะไรบ้าง

เบราว์เซอร์ตรวจสอบอะไรในใบรับรองของเว็บไซต์ก่อนแสดงกุญแจสีเขียว

PGP: การเข้ารหัสด้วยกุญแจสาธารณะและกุญแจส่วนตัวทำงานอย่างไร

เหตุใดจึงสามารถแชร์กุญแจสาธารณะ PGP ได้อย่างอิสระ แต่ห้ามแชร์กุญแจส่วนตัวเด็ดขาด