- หน้าแรก
- เข้ารหัสลับ
- ลายเซ็น HMAC
สร้างและตรวจสอบ HMAC
สร้างและตรวจสอบลายเซ็น HMAC-SHA256 และ HMAC แบบอื่นๆ ด้วยคีย์ลับ
ไม่บังคับ ค่า header X-Hub-Signature-256 ของ GitHub (sha256=…) วางได้ทันทีโดยไม่ต้องแก้
HMAC คือลายเซ็นที่สร้างจากข้อความและคีย์ลับที่ใช้ร่วมกัน ผู้ที่มีคีย์สามารถคำนวณซ้ำได้ และการเปลี่ยนข้อความหรือคีย์ใด ๆ จะได้ค่าที่ต่างออกไป Webhook (GitHub, Stripe, Slack) คำขอ API ที่มีลายเซ็น และโทเค็น JWT HS256 ล้วนใช้ HMAC ค่า HMAC อัปเดตทันทีขณะพิมพ์ และคุณวางลายเซ็นเพื่อตรวจสอบได้ การคำนวณใช้ Web Crypto ที่มีในเบราว์เซอร์ ข้อความและคีย์จึงไม่ออกจากอุปกรณ์ของคุณ ใช้ฟรีและไม่ต้องสมัครสมาชิก
วิธีสร้างและตรวจสอบ HMAC
- วางข้อความให้ตรงกับที่ถูกเซ็นทุกประการ สำหรับ webhook คือ body ของคำขอแบบดิบ
- ใส่คีย์ลับ หรือคลิก “สร้าง” เพื่อสุ่มคีย์ เลือก “Hex” หากคุณได้รับคีย์เป็นไบต์แบบ hex
- เลือกอัลกอริทึม (SHA-256 เว้นแต่ได้รับแจ้งเป็นอย่างอื่น) แล้วคัดลอกผลลัพธ์เป็น hex หรือ Base64
- หากจะตรวจลายเซ็น ให้วางไว้ในส่วน “ตรวจสอบลายเซ็น” ค่า 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