HMAC에는 메시지 외에 키가 필요하다
일반 SHA-256은 메시지 바이트의 해시입니다. HMAC-SHA-256은 키와 메시지로 인증 값을 계산합니다. RFC 2104의 구성은 단순히 키를 메시지 앞에 붙여 해시하는 방식이 아닙니다. 키를 쓰지 않은 해시의 일치만으로 발신자를 인증할 수 없습니다.
RFC 테스트 키의 바이트를 그대로 재현한다
RFC 4231 테스트 1은 0x0b 바이트 20개와 메시지 Hi There를 사용합니다. 아래 코드는 Web Crypto의 HMAC 키를 가져와 결과를 16진수로 출력합니다. 0b라는 글자를 20번 반복하면 40바이트의 다른 입력이 됩니다. 공개 테스트 키이며 운영용 비밀 키가 아닙니다.
Moyoutil 해시 도구는 일반 SHA 해시를 계산하며 HMAC 입력란이 없습니다. 아래는 별도 JavaScript 예제이고 로그인·웹훅 검증 시스템의 완성된 구현이 아닙니다. 실제 인증에는 비밀 키 보호와 올바른 검증 절차가 필요합니다.
const hex = bytes => Array.from(new Uint8Array(bytes),
n => n.toString(16).padStart(2, '0')).join('');
const keyBytes = new Uint8Array(20).fill(0x0b);
const message = new TextEncoder().encode('Hi There');
const key = await crypto.subtle.importKey(
'raw', keyBytes, {name:'HMAC', hash:'SHA-256'},
false, ['sign']);
const mac = await crypto.subtle.sign('HMAC', key, message);
console.log(hex(mac));
// b0344c61d8db38535ca8afceaf0bf12b
// 881dc200c9833da726e9376c2e32cff7자주 묻는 질문
같은 SHA-256 이름인데 결과를 서로 비교해도 되나요?
일반 SHA-256과 HMAC-SHA-256을 혼동하지 마세요. HMAC을 비교하려면 같은 키 바이트, 같은 메시지 바이트와 같은 알고리즘이 필요합니다. 16진수와 Base64 같은 출력 표현도 구분하세요.