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

Node.js crypto.createHash() 메서드 완벽 정리: 해시 생성 방법과 실전 예제

개요

Node.js의 crypto.createHash() 메서드는 지정된 알고리즘을 기반으로 해시(Hash) 객체를 생성한 후 이를 반환합니다. 반환된 해시 객체는 update()digest() 메서드를 체이닝하여 데이터의 해시 다이제스트를 손쉽게 생성할 수 있습니다. 선택 사항인 options 매개변수는 스트림 동작을 제어하는 용도로 사용되며, XOF 또는 shake256처럼 가변 길이 출력을 지원하는 해시 함수의 경우 outputLength 옵션으로 원하는 출력 길이를 바이트 단위로 지정할 수 있습니다.

문법(Syntax)

crypto.createHash(algorithm, [options])

매개변수

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

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

예제 1: 문자열 해시 생성하기

먼저 createHash.js라는 이름의 파일을 생성하고 아래 코드를 복사한 뒤, 다음 명령어로 실행합니다.

node createHash.js

createHash.js

// crypto.createHash() 데모 예제

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

// 시크릿 키 정의
const secret = 'TutorialsPoint';

// createHash 메서드 초기화
const hashValue = crypto.createHash('sha256', secret)

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

    // 인코딩 방식 지정
    .digest('hex');

// 결과 출력
console.log("생성된 해시 값: ", hashValue);

실행 결과

C:\home\node>> node createHash.js
생성된 해시 값:
5f55ecb1ca233d41dffb6fd9e307d37b9eb4dad472a9e7767e8727132b784461

위 예제에서는 sha256 알고리즘으로 해시 객체를 만든 뒤, update()로 문자열 데이터를 전달하고 digest('hex')를 호출해 16진수(hex) 형태의 최종 해시 값을 얻었습니다.

예제 2: 파일 스트림 해시 생성하기

두 번째 예제는 대용량 파일을 한 번에 메모리에 올리지 않고, 스트림(stream)으로 조금씩 읽으면서 해시 값을 계산하는 방법을 보여줍니다. 이 방식은 파일 무결성 검증 등에 유용하게 활용됩니다.

// crypto.createHash() 데모 예제

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

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

// 현재 경로에 대한 해시 객체 생성
const hash = crypto.createHash('sha256', "TutorialsPoint");

const input = fs.createReadStream(filename);
input.on('readable', () => {
    // 해시 스트림에서 생성된 데이터를 하나씩 읽기
    const val = input.read();
    if (val)
        hash.update(val);
    else {
        console.log(`${hash.digest('hex')} ${filename}`);
   &;}
});

실행 결과

C:\home\node>> node createHash.js
d1bd739234aa1ede5acfaccee657296ead1879644764f45be17466a9192c3967
/home/node/test/createHash.js

파일을 모두 읽고 더 이상 읽을 데이터가 없으면 readable 이벤트 핸들러에서 valnull이 되며, 이때 digest('hex')를 호출해 최종 해시 값과 파일 경로를 함께 출력합니다.

핵심 정리

  • crypto.createHash(algorithm)은 지정한 알고리즘의 해시 객체를 생성하고 반환합니다.

  • update(data)로 해싱할 데이터를 입력하며, 여러 번 호출해 데이터를 누적할 수 있습니다.

  • digest(encoding)로 최종 해시 다이제스트를 생성하며, 'hex', 'base64' 등의 인코딩 방식을 지정할 수 있습니다.

  • 대용량 파일은 스트림으로 읽으며 순차적으로 update()를 호출하는 방식이 효율적입니다.