본문 바로가기

Backend/Node.js

Node.js 패스워드 암호화 - bcrypt

NodeJS에서 bcrypt로 패스워드 암호화하는 방법을 알아볼게요.

bcrypt는 현업에서 많이 사용하고 있는 패스워드 암호화 알고리즘이에요.

기본적으로 salt를 추가하여 해싱하기 때문에 오래 전부터 많이 사용하는 SHA256이나 SHA512보다 보안성이 높다는 평가를 받아요.

물론 다른 알고리즘들도 어떻게 개발자가 salt를 활용하여 커스텀하게 구현하느냐에 따라 보안 강도가 달라지지만 bcrypt를 선택했다는 것만으로도 안정성을 어느 정도 보장받는다고 보시면 되요.

 

이제부터 NodeJS로 어떻게 평문을 bcrypt를 활용하여 암호화하고 검증하는지 코딩을 해볼게요.

bcrypt 모듈을 설치

npm install bcrypt

 

이제 사용만 하면 되요.

일단 암호화해볼게요.

bcrypt 모듈을 소스 상에서 임포트

const bcrypt = require('bcrypt')

비밀번호 암호화 (hashSync or hash)

const password = '1234'
const encryptedPassowrd = bcrypt.hashSync(password, 10) // sync

 

const password = '1234'
bcrypt.hash(password, 10, (err, encryptedPassowrd) => {
  // async callback
})

 

비밀번호 비교 (compareSync or compare)

const password = '1234'
const encodedPassword = '$2a$10$tUUfk1E0jGr90ntHxl/wE.lzrVvAQfxJ7nRo3RYXi2XqJtlv2h.UW'
const same = bcrypt.compareSync(password, encodedPassword) // sync

 

const password = '1234'
const encodedPassword = '$2a$10$tUUfk1E0jGr90ntHxl/wE.lzrVvAQfxJ7nRo3RYXi2XqJtlv2h.UW'
bcrypt.compare(password, encodedPassword, (err, same) => {
  // async callback
})

 

Sync가 붙지 않으면 비동기 방식으로 콜백을 받아서 처리하게 끔 되어있구요.

Sync가 붙으면 동기 방식으로 메서드 기능에 맞게 데이터를 리턴을 받게 끔 되어있어요.

상황에 맞게 적절히 사용하시면 됩니다.

 

hash할 때 숫자 10 파라미터명은 saltOrRounds이에요.

암호화에 사용할 솔트 (The salt to be used in encryption.)

즉, salt를 몇 번 돌릴거냐는 뜻이구요. 보통 기본 10으로 설정한다고 보시면 됩니다.

saltOrRounds가 높을 수록 암호화가 강력해지지만 속도는 현저히 느려져요.