본문 바로가기

Programming/Nodejs tips

Nodejs 비밀번호 암호화

요즘에는 소셜 로그인을 많이 하기 때문에 비밀빈호가 전혀 필요하지 않는 경우가 많다. 비밀번호가 필요한 경우, 일반적으로 본인 외 누구도 알아서는 안되는 코드이기 때문에 암호화가 기본이다.

 

이번에는 가장 많이 쓰이는 단방향 암호화를 통해 비밀번호를 아주 비밀스럽게 만드는 방법을 코드로 알아보자.

 

import { pbkdf2Sync, randomBytes } from 'node:crypto';

const encryptPassword = (password) => {
  const salt = randomBytes(64).toString('base64'); // random salt 생성
  const iteration = 100000; // 해시 함수 반복 수
  const keylen = 64; // 암호화 된 비밀번호 길이
  const digest = 'sha512'; // HMAC digest algorithm

  const derivedKey = pbkdf2Sync(password, salt, iteration, keylen, digest);

  return { salt, password: derivedKey.toString('base64') };
};

const result = encryptPassword('password');
console.log(result)

 

result 결과는?

 

pbkdf2Sync 와 randomBytes 는 Buffer 를 반환하기 때문에 .toString('base64') 를 통해 base64 문자열로 변환하여 원하는 결과값을 얻어낼 수 있다.

 

해당 함수를 활용하여 클라이언트에서 로그인 하는 사용자의 비밀번호를 암호화 후 데이터베이스에 저장 된 비밀번호와 비교할 수 있다. salt 는 유저마다 랜덤하게 생성되므로 꼭 데이터베이스에 함께 저장 하도록 한다.