대기업을 향한 디벨롭 블로그

bcrypt 비밀번호 암호화하기 (mongoose pre함수) 본문

Node.js

bcrypt 비밀번호 암호화하기 (mongoose pre함수)

MHY.PRO 2022. 9. 14. 10:19

bcrypt 공식 사이트는 여기서 볼 수 있다.

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

 

bcrypt

A bcrypt library for NodeJS.. Latest version: 5.0.1, last published: 2 years ago. Start using bcrypt in your project by running `npm i bcrypt`. There are 3480 other projects in the npm registry using bcrypt.

www.npmjs.com

bcrypt는 암호를 해시하는데 사용하는 라이브러리다. bcrypt는 강력하고 여러곳에서 사용되고있다. 

 

코드를 통해 사용법을 익혀보자.

 

먼저 bcrypt를 다운로드 해주어야된다 .

 

npm install bcrypt

 

다운로드를 해주고 

 

const bcrypt = require('bcrypt');

require를 사용하여 bcrypt를 불러와준다.

 

나는 현재 몽구스 스키마를 사용해서 유저데이터를 저장하기전에 비밀번호를 암호화해줄거다. 

 

비동기 콜백 방식으로 구현해보겠다.

Technique1 과 Technique2가 있는데 결과값은 똑같다고하니 , 더짧은 두번째 방식을 그대로 사용해보기로하자.

공식사이트에서도 서버에서 사용할 경우 비동기모드가 좋다고한다. 이런건 고집부리면안되고 , 따라주어야한다. ㅇㅈㅇㅈ

 

일단 saltRounds라는 변수에 숫자를 넣어서 salt를 만들어주어야한다. salt란 다른값을 첨가해서 해쉬를 만들어낸다. 즉 패스워드에 추가되어 해싱이된다. 보안적으로 훨씬 안전한 방법이다. 

 

const saltRounds = 10;

salt를 10으로 정해주었다.

 

bcrypt.hash(user.password , saltRounds , (err,hash)=>{
    console.log(hash);
})

hash함수의 첫번째 인자로 쌩비밀번호가 들어가고 , 두번째는 salt , 세번째로 콜백함수가 들어간다. 결과값은 콜백함수의 2번째인자 hash들어간다. 테스트를 한번 해보겠다.

 

이런 읽지도 못하는 값들이 저장이되었다. 이제 이값을 Database에 저장해주어야된다. 

절대 쌩비밀번호를 데이터베이스에 넣어서는 안된다!!

 

그리고 이제 비밀번호를 체크하는걸 알아보자.

이번엔 compare라는 함수를 이용하여 비밀번호를 비교한다.

첫번째 인자로 쌩비밀번호가 들어가고 , 두번째로는 hash된 비밀번호 즉 데이터베이스에 있는 비밀번호가 들어간다. 세번째로는 콜백함수가 들어가고 , 콜백함수의 두번째 인자로 결과값이 Boolean으로 나오게된다. 

 

이렇게 비밀번호를 암호화하는걸 알아보았다. 서버개발을 할려면 이런 보안문제같은것도 잘알아야된다. 공부할게 아직 많이 남았다.