Toolonit
  1. หน้าแรก
  2. เข้ารหัสลับ
  3. ลายเซ็น HMAC

สร้างและตรวจสอบ HMAC

สร้างและตรวจสอบลายเซ็น HMAC-SHA256 และ HMAC แบบอื่นๆ ด้วยคีย์ลับ

0 ไบต์
คีย์เป็น
อัลกอริทึม
ผลลัพธ์
HMAC-SHA-256ใส่คีย์ลับเพื่อดู HMAC

ไม่บังคับ ค่า header X-Hub-Signature-256 ของ GitHub (sha256=…) วางได้ทันทีโดยไม่ต้องแก้

HMAC คือลายเซ็นที่สร้างจากข้อความและคีย์ลับที่ใช้ร่วมกัน ผู้ที่มีคีย์สามารถคำนวณซ้ำได้ และการเปลี่ยนข้อความหรือคีย์ใด ๆ จะได้ค่าที่ต่างออกไป Webhook (GitHub, Stripe, Slack) คำขอ API ที่มีลายเซ็น และโทเค็น JWT HS256 ล้วนใช้ HMAC ค่า HMAC อัปเดตทันทีขณะพิมพ์ และคุณวางลายเซ็นเพื่อตรวจสอบได้ การคำนวณใช้ Web Crypto ที่มีในเบราว์เซอร์ ข้อความและคีย์จึงไม่ออกจากอุปกรณ์ของคุณ ใช้ฟรีและไม่ต้องสมัครสมาชิก

วิธีสร้างและตรวจสอบ HMAC

  1. วางข้อความให้ตรงกับที่ถูกเซ็นทุกประการ สำหรับ webhook คือ body ของคำขอแบบดิบ
  2. ใส่คีย์ลับ หรือคลิก “สร้าง” เพื่อสุ่มคีย์ เลือก “Hex” หากคุณได้รับคีย์เป็นไบต์แบบ hex
  3. เลือกอัลกอริทึม (SHA-256 เว้นแต่ได้รับแจ้งเป็นอย่างอื่น) แล้วคัดลอกผลลัพธ์เป็น hex หรือ Base64
  4. หากจะตรวจลายเซ็น ให้วางไว้ในส่วน “ตรวจสอบลายเซ็น” ค่า header ของ GitHub แบบ sha256=… ใช้ได้ทันทีโดยไม่ต้องแก้

ความสามารถ

  • HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 และ HMAC-SHA512
  • คีย์ลับแบบข้อความ (UTF-8) หรือ hex หรือคีย์สุ่ม 32 ไบต์จากปุ่ม “สร้าง”
  • ผลลัพธ์เป็น hex หรือ Base64 อัปเดตทันทีขณะพิมพ์
  • ตรวจลายเซ็นที่ได้รับแบบ hex หรือ Base64 (รวมถึงแบบ URL-safe) มีหรือไม่มีคำนำหน้า sha256= ของ GitHub หรือ v0= ของ Slack ก็ได้
  • แจ้งเมื่อลายเซ็นมีความยาวของอัลกอริทึมอื่น พร้อมปุ่มสำหรับสลับอัลกอริทึม
  • คำนวณด้วย Web Crypto ที่มีในเบราว์เซอร์ของคุณ

เป็นส่วนตัวหรือไม่

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

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

ตรวจลายเซ็น webhook ของ GitHub ได้อย่างไร

วาง body ของคำขอแบบดิบเป็นข้อความ ใส่ webhook secret เป็นคีย์แบบข้อความ แล้ววางค่า header X-Hub-Signature-256 ในส่วน “ตรวจสอบลายเซ็น” GitHub ส่ง sha256= ตามด้วย HMAC-SHA256 ของ body แบบ hex และระบบอ่านคำนำหน้านี้ได้ตามที่เป็น

ตรวจลายเซ็น JWT HS256 ได้อย่างไร

วาง header และ payload ของโทเค็น ซึ่งคือทุกอย่างก่อนจุดที่สอง เป็นข้อความ ใส่ secret เป็นคีย์ เลือก SHA-256 แล้ววางส่วนที่สามของโทเค็นในส่วน “ตรวจสอบลายเซ็น” ระบบอ่าน Base64 แบบ URL-safe ของส่วนนี้ได้ตามที่เป็น

ทำไมลายเซ็นของฉันไม่ตรงกัน

ข้อความต้องตรงกับที่ถูกเซ็นทุกไบต์ JSON ที่ถูกจัดรูปแบบใหม่ การขึ้นบรรทัดที่ขาดหรือเกินมาตอนท้าย หรือการขึ้นบรรทัดแบบ Windows (CRLF) ล้วนทำให้ HMAC เปลี่ยน ข้อความที่พิมพ์ที่นี่ใช้การขึ้นบรรทัดแบบ LF นอกจากนี้ให้ตรวจอัลกอริทึม และดูว่าคีย์เป็นข้อความหรือ hex

ได้ผลเหมือน OpenSSL ไหม

เหมือน printf '%s' 'message' | openssl dgst -sha256 -hmac 'key' จะแสดงค่า hex เดียวกัน และคีย์ hex จะตรงกับ -mac HMAC -macopt hexkey:… ให้ใช้ printf หรือ echo -n เพราะ echo ธรรมดาจะเติมการขึ้นบรรทัดใหม่ ซึ่งถูกเซ็นไปด้วย

HMAC-SHA1 ยังปลอดภัยอยู่ไหม

สำหรับ HMAC ในทางปฏิบัติยังปลอดภัย การชนกันของ SHA-1 ที่รู้กันอยู่ไม่ได้ทำให้ HMAC-SHA1 ถูกเจาะ webhook รุ่นเก่าจึงยังใช้อยู่ แต่สำหรับงานใหม่ให้เลือก HMAC-SHA256

เครื่องมือที่เกี่ยวข้อง