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);
실행 결과
해시값을 생성해 출력하는 것을 확인할 수 있습니다.
'Nodejs' 카테고리의 다른 글
[Nodejs]moment 모듈 활용 예시 만들기 (0) | 2025.02.07 |
---|---|
[Nodejs] 웹 스크래핑을 활용한 네이버 뉴스 헤드라인 텍스트 추출 (2) | 2025.02.03 |
[Nodejs] 간단한 REST API 서버 만들기 (0) | 2025.01.20 |
[Nodejs] OS 모듈 활용하기 (0) | 2025.01.17 |
[Nodejs] 환경변수 파일 활용해 환경변수 설정 및 사용하기 (0) | 2025.01.10 |