Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js crypto.createHmac() 메서드 완벽 가이드

crypto.createHmac() 메서드는 지정한 알고리즘과 키를 기반으로 Hmac 객체를 생성한 뒤 해당 객체를 반환합니다. 선택적으로 옵션(options)을 전달하여 스트림 동작을 제어할 수 있으며, 여기서 정의된 키는 암호화 HMAC 해시를 생성하는 데 사용되는 HMAC 키입니다.

HMAC(Hash-based Message Authentication Code)은 데이터의 무결성과 인증을 검증하기 위해 널리 사용되는 기술로, API 서명, 웹훅 검증, 비밀번호 해싱 등 다양한 보안 시나리오에서 활용됩니다.

문법

crypto.createHmac(algorithm, key, [options])

매개변수

  • algorithm – Hmac 객체를 생성하는 데 사용되는 알고리즘입니다. 입력 타입은 문자열(string)이며, 'sha256', 'sha512', 'md5' 등 OpenSSL에서 지원하는 해시 알고리즘을 지정할 수 있습니다.

  • key – 암호화 HMAC 해시를 생성하는 데 사용되는 HMAC 키입니다.

  • options – 스트림 동작을 제어하기 위한 선택적(optional) 매개변수입니다.

  • encoding – 사용할 문자열 인코딩 방식입니다.

예제 1: 기본적인 HMAC 값 생성

먼저 createHmac.js라는 이름의 파일을 생성하고 아래 코드를 복사해 붙여넣습니다. 그런 다음 다음 명령어로 코드를 실행합니다.

node createHmac.js

createHmac.js

// crypto.createHmac() 데모 예제

// crypto 모듈 불러오기
const crypto = require('crypto');

// 비밀 키(secret key) 정의
const secret = 'TutorialsPoint';

// 비밀 키를 사용해 createHmac 메서드 초기화
const hmacValue = crypto.createHmac('sha256', secret)

    // 인코딩할 데이터
    .update('Welcome to TutorialsPoint !')

    // 인코딩 타입 정의
    .digest('hex');

// 결과 출력
console.log("얻은 Hmac 값: ", hmacValue);

출력 결과

C:\home\node>> node createHmac.js
얻은 Hmac 값:
dd897f858bad70329fad82087110059f5cb920af2736d96277801f70bd57618e

예제 2: 파일 스트림에 HMAC 적용하기

이번에는 fs 모듈과 함께 사용하여 파일 내용 전체에 대한 HMAC 값을 계산하는 예제를 살펴보겠습니다. 이 방식은 대용량 파일도 스트림 단위로 처리할 수 있어 메모리 효율적입니다.

// crypto.createHmac() 데모 예제

// crypto 및 fs 모듈 불러오기
const crypto = require('crypto');
const fs = require('fs');

// 현재 파일 경로 가져오기
const filename = process.argv[1];

// 비밀 키를 사용해 현재 경로에 대한 hmac 생성
const hmac = crypto.createHmac('sha256', "TutorialsPoint");

const input = fs.createReadStream(filename);
input.on('readable', () => {
    // hmac 스트림에서 생성된 요소 하나 읽기
    const val = input.read();
    if (val)
        hmac.update(val);
    else {
        console.log(`${hmac.digest('hex')} ${filename}`);
    }
});

출력 결과

C:\home\node>> node createHmac.js
0489ce5e4bd940c06253764e03927414f79269fe4f91b1c75184dc074fa86e22
/home/node/test/createHmac .js

정리

crypto.createHmac()는 Node.js에서 메시지 인증 코드를 손쉽게 생성할 수 있는 강력한 도구입니다. 첫 번째 예제처럼 간단한 문자열에 적용할 수도 있고, 두 번째 예제처럼 파일 스트림과 결합하여 대용량 데이터의 무결성을 검증하는 데에도 활용할 수 있습니다. 실무에서는 API 요청 서명, 웹훅 페이로드 검증 등에 폭넓게 사용되므로 반드시 숙지해 두는 것이 좋습니다.