nestJS로 개인프로젝트만들기9

Parker.Park·2022년 8월 27일
0

personal_project1

목록 보기
9/9

Bcrypt를 통해 비밀번호 hash적용

데이터베이스에 사용자의 암호를 암호화하여 저장하는 것이 이제는 통상적이라 할 수 있다. node.js에서 사용자가 설정한 비밀번호를 해시화(Hashing)하여 암호화(Encryption)하여 저장하는 것을 배웠다. 라이브러리는 Bcrypt이다.
해시(Hash)는 복호화(Decryption)가 불가능한 것이 특징이고, 여러개의 해시 함수가 존재한다. 해싱을 한 번하는 것은 나중에 추적이 가능할 수도 있어 여러번 해싱을 걷히는 Key Strecthing방식이나 해시 함수를 돌리기전에 원문에 임의의 문자열을 덧붙이는 Salt방식이 있다.
Bcrypt npm docs를 참고하여 비밀번호 해시를 적용해 보겠다.

Usage

// (...)
// getSalt를 사용하여 salt를 생성한다. 숫자는 .env처리
const salt = await bcrypt.genSalt(Number(process.env.SALT_DATA));
// 받은 패스워드를 salt와 함께 1차 hashing한다.
const hashedPassword1 = await bcrypt.hash(password, salt);
// 1차 해시한 패스워드를 2차 hashing한다. 
const hashedPassword2 = await bcrypt.hash(hashedPassword1, 10);

// (...)

bcrypt docs대비 특별한 점은 없다. 다만 hashSync메소드와 hash메소드가 있어서 헷갈렸다. 동기방식과 비동기방식라는 차이가 있었는데, async / await 방식을 사용하면 비동기 방식의 장점을 살릴 수 있는지는 의문이었다.

또한 안내대로 사용할 경우 나중에 compare메소드로 검증이 필요할 때 genSalt를 다시 사용해야하는 번거로움이 예상된다.

참조

[npm bcrypt]

[Difference between hash() and hashSync() functions of BCrypt package of NodeJs, stackoverflow]

profile
개발자준비중

0개의 댓글