Written by Jieun
Home
  • 전체 (129)
    • Git (1)
    • React, Next (57)
    • HTML & CSS (2)
    • JavaScript, TypeScript (24)
    • Node.js (11)
    • MongoDB (4)
    • AWS (2)
    • 코딩테스트, 알고리즘 (17)
    • etc (8)
    • 일상 (1)
블로그 내 검색

Written by Jieun

👩🏻‍💻 내 마음대로 Today I Learned

  • Node.js

    [Node.js] bcrypt 비밀번호 암호화 하기

    2023. 5. 25.

    by. 지은이: 김지은

    728x90

    회원가입을 구현할 때 회원 정보를 데이터베이스에 저장해야하는데

    회원의 비밀번호를 평문 그대로 저장하게 된다면?

    관리자가 모든 회원의 비밀번호를 알 수 있음 -> 보안 취약점 발생

     

    비밀번호 저장 방법 - HASH

    Hash란? 문자열을 되돌릴 수 없는 방식으로 암호화 하는 방법으로 Hash 출력값을 이용해 사용자의 비밀번호를 알아낼 수 없다.

    비밀번호의 Hash 값을 데이터베이스에 저장하고 로그인 시 전달된 비밀번호를 Hash 하여 저장된 값과 비교하여 로그인을 처리한다.

     

    bcrypt 사용하기

    암호화 종류는 여러가지가 있지만, 그 중에서 bcrypt를 사용하여 비밀번호를 Hash 하려고 한다.

    bcrypt는 단방향 해시 함수이기 때문에 해시 값에서 원본 데이터를 역추적하여 복호화 하는 건 불가능하다.

     

    먼저 npm i bcryptjs 로 모듈을 설치해준다.

     

    https://www.npmjs.com/package/bcrypt

     

    bcrypt

    A bcrypt library for NodeJS.. Latest version: 5.1.0, last published: 8 months ago. Start using bcrypt in your project by running `npm i bcrypt`. There are 3922 other projects in the npm registry using bcrypt.

    www.npmjs.com

     

    import bcrypt from "bcryptjs";
    
    export const register = async (req, res, next) => {
      try {
        // bcrypt로 비밀번호 암호화 하기
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(req.body.password, salt);
    
        const newUser = await User.create({
          username: req.body.username,
          email: req.body.email,
          password: hash,
        });

    bcrypt 를 import 하고 genSaltSync() 함수로 비밀번호 해싱하기 위한 무작위 데이터 값인 salt를 생성한다.

    (뒤에 숫자가 높을 수록 보안은 높아지지만 시간이 오래걸림)

    hashSync()함수로 사용자가 입력한 비밀번호를 salt값과 함께 해싱한다.

    이제 회원가입을 하게 되면 password는 해시된 비밀번호가 할당되어 데이터베이스에 저장된다.

     

     

    비밀번호 확인

    그렇다면 회원가입 후 로그인 할 때 입력한 비밀번호가 맞는지 확인 하려면 어떻게 해야할까?

    const isPasswordCorrect = await bcrypt.compare(
          req.body.password,
          user.password
    );

    bcrypt.compare() 함수에 입력한 비밀번호와 hash된 비밀번호를 넣어서 일치하는지 확인하기

     

     

    저작자표시 (새창열림)

    'Node.js' 카테고리의 다른 글

    [Node.js] req.params와 req.query  (0) 2023.05.27
    [Node.js] JWT (Json Web Token)이란?  (0) 2023.05.26
    [Node.js] Express 라우터 분리하기  (0) 2023.04.13
    [Node.js] fs(파일 시스템) 사용하기  (0) 2023.04.11
    [Node.js] path 모듈  (0) 2023.04.10

    댓글

    관련글

    • [Node.js] req.params와 req.query 2023.05.27
    • [Node.js] JWT (Json Web Token)이란? 2023.05.26
    • [Node.js] Express 라우터 분리하기 2023.04.13
    • [Node.js] fs(파일 시스템) 사용하기 2023.04.11
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Designed by Nana
블로그 이미지
지은이: 김지은

티스토리툴바