BookStore - 회원가입 암호화(Hash)

데브코스

목록 보기
64/133
post-thumbnail

const join = (req, res) => {
  const { email, password } = req.body;

  let sql = `INSERT INTO users (email, password) VALUES (?, ?)`;
  //비밀번호 암호화
  const salt = crypto.randomBytes(64).toString("base64"); //솔트 생성
  const hashPassword = crypto
    .pbkdf2Sync(password, salt, 10000, 10, "sha512")
    .toString("base64"); //해시된 비밀번호  //randomBytes : 매개변수로 들어오는 숫자를 가지고 random한 바이트를 생성해주는 함수 여기서는 64바이트짜리 솔트를 생성해주는거지 //그리고 문자열로 바꿀 건데, base64형태로 바꿀거야(우리가 기본적으로 많이 쓰는 인코딩 방식 중 하나지)
  //pbkdf2Sync : 비밀번호 기반 키 도출 함수, 암호화 알고리즘 종류 중 하나 //매개변수로 들어오는 비밀번호와 솔트를 가지고 10000번 해싱을 해서 64바이트 길이의 해시된 비밀번호를 sha512알고리즘으로 만들어줘 라는 뜻

  let values = [email, hashPassword, salt]; // 회원가입 시 비밀번호를 암호화해서 암호화된 비밀번호와, salt 값을 같이 저장

  connection.query(sql, values, (err, results) => {
    if (err) {
      console.log(err);
      return res.status(StatusCodes.BAD_REQUEST).end();
    }

    return res.status(StatusCodes.CREATED).json(results);
  });
};

여기서 보면

1. 솔트 생성

const salt = crypto.randomBytes(64).toString("base64"); 

crypto는 암호화하게 해주는 모듈이고,
랜덤한 바이트를 생성해주는 함수야. 그걸 스트링 즉, 문자열로 만들건데, base64형태로 바꿀거야.

  • 이게 우리가 기본적으로 많이 쓰는 인코딩 방식 중 하나야.

2. 해시된 비밀번호

const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 10, "sha512").toString("base64");

pbkdf2Sync : 비밀번호 기반 키 도출 함수, 암호화 알고리즘 종류 중 하나.

지금부터 패스워드를 암호화할 것인데, hashPassword에 해싱(암호화된)비밀번호를 담을거야.
어떤 방식으로 담을거야? pbkdf2Sync 라는 함수로 담을 것이고,

매개변수로 들어오는 비밀번호와 솔트를 가지고 10000번 해싱을 해서 64바이트 길이의 해시된 비밀번호를 sha512알고리즘으로 만들어줘 라는 뜻.

profile
Dive Head First | Work Super Hard | Attract Great People

0개의 댓글