[Node.js] 비밀번호 암호화

Hyunji·2022년 2월 15일
0

공부

목록 보기
6/35
post-thumbnail

회원가입/로그인 기능을 구현하다보면 db에 저장되는 비밀번호를 암호화 해줘야 한다.

암호화를 할 때 사용할 수 있는 여러가지 모듈이 있지만 bcrypt 로 비밀번호를 암호화하는 방법에 대해서 알아보자


bcypt 란?

웹 페이지를 구현할 때 보안은 가장 기본적으로 수행되어야 할 요소이다. 비밀번호를 텍스트 그대로 데이터 베이스에 저장해 관리하는 것은 해커에게 대놓고 데이터를 주는 것과 다름없다. 이를 방지하고자 비밀번호를 암호화 하는 것이 bcrypt 모듈이다.
bcrypt 는 단방향 해시 함수를 이용한 모듈로서 salt 라는 개념을 사용한다. salt 라는 값과 해시된 비밀번호를 합쳐 데이터 베이스에 저장하게 되는데 이렇게 하면, 만약 "1234" 같은 비밀번호를 해시함수에 넣었을 때, 항상 다른 값의 salt 값과 비밀번호가 합쳐서 해커들이 비밀번호를 찾는데 있어 더욱 힘들게 만든다.


사용방법

bcrypt 모듈을 설치

npm install bcrypt

먼저, 모듈을 설치해준다.

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

const bcrypt = require('bcrypt');

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

const password = '1234';
const encodedpassword = bcrypt.hashSync(password, 10); //sync
const password = '1234';
bcrypt.hash(password, 10, (err, encodedpassword) => {
  //async callback
});

비밀번호 비교 (compareSync or compare)

const password = '1234';
const encodedpassword = '$2b$10$uMNP5/GJidiuB8kRWbGs7.h5Y6TbP3jCx77odyHmt5OrL1vlqvSEy';
const same = bcrypt.compareSync(password, encodedpassword); // sync
const pasword = '1234';
const encodedpassword = '$2b$10$uMNP5/GJidiuB8kRWbGs7.h5Y6TbP3jCx77odyHmt5OrL1vlqvSEy';
bcrypt.compare(password, encodedpassword, (err, same) => {
  // async callback
});
  • Sync가 붙지 않으면 비동기 방식으로 콜백을 받아서 처리하게 끔 되어있음

  • Sync가 붙으면 동기 방식으로 메서드 기능에 맞게 데이터를 리턴 받게 끔 되어있음
    => 상황에 맞게 적절히 사용하면 된다.

  • hash 할 때, 숫자 10 파라미터명은 salrOrRounds.

  • 암호화에 사용할 솔트, 즉 salt를 몇 번 돌릴거냐는 뜻인데 보통 기본 10으로 설정

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


https://gofnrk.tistory.com/112
https://www.npmjs.com/package/bcrypt
https://kingofbackend.tistory.com/3

profile
성장중인 개발자

0개의 댓글