본문 바로가기

HMAC 생성기

브라우저 처리

비밀 키와 메시지로 HMAC-SHA256·384·512 서명을 만들고, 웹훅에서 받은 서명(sha256=… 등)과 일치하는지 바로 확인합니다. 키는 텍스트·16진수·Base64로 넣을 수 있고 결과는 소문자 16진수나 Base64로 나옵니다.

사용 전 확인
  • 보안·인코딩·토큰·네트워크 관련 결과는 작업 보조용입니다. 비밀번호, 비밀키, 운영 토큰, 실제 서비스 취약점 정보는 입력하지 말고 공식 보안 기준을 함께 확인하세요.
도구 실행입력 후 결과 확인
HMAC 생성기 샘플 실행

GitHub·Stripe·Slack·Shopify 같은 서비스는 웹훅 요청이 진짜인지 확인할 수 있도록 본문을 비밀 키로 HMAC 서명해 헤더에 넣어 보냅니다. 연동을 개발하다 서명 검증이 계속 실패하면, 같은 키와 본문으로 서명을 직접 만들어 비교해 보는 것이 가장 빠른 확인 방법입니다.

브라우저 처리
샘플 결과
f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
자바스크립트가 활성화되면 이 영역이 실제 입력, 실행, 결과 패널로 바뀝니다.

HMAC 생성기 사용 가이드

GitHub·Stripe·Slack·Shopify 같은 서비스는 웹훅 요청이 진짜인지 확인할 수 있도록 본문을 비밀 키로 HMAC 서명해 헤더에 넣어 보냅니다. 연동을 개발하다 서명 검증이 계속 실패하면, 같은 키와 본문으로 서명을 직접 만들어 비교해 보는 것이 가장 빠른 확인 방법입니다.

이 도구는 브라우저의 Web Crypto API로 HMAC-SHA256, SHA-384, SHA-512를 계산합니다. 결과는 대부분의 웹훅이 쓰는 소문자 16진수나 Base64로 보여 줍니다. '받은 서명' 칸에 헤더 값을 넣으면 sha256=, v0= 같은 접두사를 떼고 16진수·Base64·URL-safe Base64 어느 형식이든 일치 여부를 알려 줍니다.

비밀 키는 텍스트(UTF-8)뿐 아니라 16진수나 Base64로 받은 키도 바이트로 바꿔 씁니다. 같은 키라도 형식을 잘못 고르면 전혀 다른 서명이 나오므로 키 형식을 먼저 확인하세요.

사용 방법

  1. '알고리즘'(보통 SHA-256)과 '출력 형식'(HEX 또는 Base64)을 고릅니다.
  2. '비밀 키 형식'을 고르고 '비밀 키'에 키를 넣습니다.
  3. '메시지'에 서명할 원문(웹훅 본문 그대로)을 붙여 넣고, 비교할 서명이 있으면 '받은 서명'에 넣습니다.
  4. 'HMAC 생성'을 누르면 결과와 함께 받은 서명과의 일치 여부가 상태 줄에 나옵니다.

예시: 표준 시험 벡터로 확인

입력
알고리즘: SHA-256 · 키(텍스트): key
메시지: The quick brown fox jumps over the lazy dog
결과
f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

널리 알려진 HMAC-SHA256 시험 값과 같은 결과입니다.

이럴 때 쓰면 좋아요

  • 웹훅 서명 검증 코드가 실패할 때 기대 서명을 직접 계산해 비교할 때
  • API 요청 서명(HMAC 인증)을 구현하며 중간 값을 확인할 때
  • 결제 연동 테스트에서 받은 서명이 맞는지 확인할 때
  • HMAC 개념을 배우며 키·메시지에 따른 결과 변화를 볼 때

문제가 생겼을 때

받은 서명과 다르다고 나옴

가장 흔한 원인은 메시지가 원문과 다른 경우입니다. JSON을 정렬·들여쓰기하면 다른 바이트가 되니, 받은 본문 그대로(공백·줄바꿈 포함) 넣으세요. 그다음 키 형식과 알고리즘을 확인합니다.

'비밀 키가 올바른 16진수가 아닙니다' 오류

16진수 키는 두 글자씩 짝이 맞아야 합니다. 텍스트 키를 넣은 것이라면 '비밀 키 형식'을 텍스트로 바꾸세요.

Slack 서명이 맞지 않음

Slack은 'v0:타임스탬프:본문'을 이어 붙인 문자열에 서명합니다. 메시지 칸에 그 형식 그대로 넣어야 합니다.

활용 팁

  • 운영 환경의 실제 비밀 키는 공용 컴퓨터에서 입력하지 말고, 테스트용 키로 먼저 확인하세요.
  • 서버 코드에서는 서명을 비교할 때 일반 == 대신 상수 시간 비교 함수(timingSafeEqual 등)를 쓰세요.
  • 단순 무결성 확인(키 없이)이 목적이라면 해시 생성기의 SHA-256을 쓰면 됩니다.

자주 묻는 질문

결과가 대문자가 아니라 소문자인 이유는?

GitHub(X-Hub-Signature-256)·Stripe 등 대부분의 웹훅이 소문자 16진수를 쓰기 때문입니다. 16진수는 대소문자만 다를 뿐 값은 같고, 받은 서명 비교는 대소문자를 가리지 않습니다.

MD5나 SHA-1 HMAC도 되나요?

Web Crypto API가 안전한 SHA-2 계열만 제공해 SHA-256·384·512를 지원합니다. 오래된 시스템의 HMAC-SHA1은 서버 쪽 도구로 확인하세요.

입력한 키가 저장되나요?

아니요. 계산은 이 브라우저 안에서만 하고 키와 메시지는 어디에도 전송하거나 저장하지 않습니다.

계산·판단 기준

근거
  • 입력 문자열, 토큰, 해시, 인코딩 값, 네트워크 형식처럼 사용자가 제공한 데이터를 브라우저에서 변환하거나 점검합니다.
  • 보안 관련 도구는 개발과 학습을 돕기 위한 참고 결과를 만들며 운영 환경 검증을 대신하지 않습니다.
한계
  • 실제 비밀번호, 개인 키, 운영 토큰, 고객 정보, 취약점 상세처럼 노출되면 위험한 값은 입력하지 마세요.
  • 해시, 토큰, 인코딩 결과는 보안성 보장이나 침해 여부 확인을 의미하지 않습니다.
공식 확인
  • 운영 보안 판단 전에는 조직 보안 정책, 공식 문서, 전문 보안 점검 절차와 함께 확인하세요.
출처·검증 경로

검토 범위: 입력, 실행, 결과 표시가 설명대로 동작하는지 자동으로 점검하지만 모든 입력 형식과 사용 환경을 보장하지는 않습니다. 결과를 제출하거나 공유하기 전에 직접 열어 확인하세요.