본문 바로가기
Nodejs

[Nodejs] sha256 사용해 해시값 생성하기

by teamnova 2025. 1. 24.
728x90

오늘은 crypto 모듈을 활용해 특정 문자열에 대응되는 sha256 해시값을 생성하는 예시를 만들어 보겠습니다.

 

sha256은 256비트 길이를 가진 SHA-2(Secure Hash Algorithm2) 계열 암호화 해시함수입니다.

 

 

 

1.프로젝트 생성 및 초기

mkdir 생성할 폴더명
cd 방금 생성한 폴더명
npm init -y

=> 원하는 경로에 폴더를 생성하고 해당 폴더로 이동 후 프로젝트 생성 및 초기화 시켜줍니다.


 

 

 

2.해시값 만들 js파일 생성

touch js 파일명

 

 

저는 위 이미지와 같이 생성하였습니다.


 

 

 

 

3.해시값 만들 js파일 코드 작성

// crypto 모듈 가용성 체크 및 crypto 모듈 초기화
// => Nodejs가 crypto 모듈을 지원하지 않는 경우가 있음, 이에 따라 require시 가용성까지 추가 체크
// 관련 정보 https://nodejs.org/docs/latest-v22.x/api/crypto.html 참고
let crypto;
try {
    // crypto 모듈 import
    crypto = require('node:crypto');
} catch (err) {
    // crypto 모듈을 사용할 수 없는 경우의 에러 처리
    console.error('crypto 모듈을 사용할 수 없습니다:', err.message);
    // 실행 중단
    throw new Error('crypto 모듈 로드 실패로 실행을 중단합니다.')
}

// 문자열을 해시화하는 함수
function createSecureHash(input) {
    // 입력값 검증
    if (typeof input !== 'string' || input.length === 0) {
        throw new Error('입력값은 비어있지 않은 문자열이어야 합니다');
    }

    try {
        // 문자열 정규화 수행 - Unicode 문자의 다양한 표현을 일관되게 처리
        // ex) é 와 e\u0301 같은 차이 해결
        const normalizedInput = input.normalize('NFKC');

        // SHA-256 해시 객체 생성
        const hash = crypto.createHash('sha256');

        // SHA-256 해시 객체에 변환할 문자열 추가, 추가한 문자열 데이터의 인코딩 방식 UTF-8 지정
        hash.update(normalizedInput, 'utf8');

        // 해시값 생성 및 해당 해시값과 입력값을 포함한 객체 반환        
        return {
            originalMessage: input,
            hash: hash.digest('hex')
        };
    } catch (error) {
        throw new Error(`해시값 생성 실패: ${error.message}`);
    }
}


// 실행
const result = createSecureHash('해시값으로 변환할 문자열 입니다');
console.log('-----작업 결과-----');
console.log('입력한 문자열:', result.originalMessage);
console.log('Hash 값:', result.hash);



 

 

실행 결과

 

해시값을 생성해 출력하는 것을 확인할 수 있습니다.