포시코딩

Node.js, MongoDB 로 웹서비스 만들기 - 10. 회원가입(2) - bcrypt 암호화 본문

Node.js

Node.js, MongoDB 로 웹서비스 만들기 - 10. 회원가입(2) - bcrypt 암호화

포시 2022. 6. 10. 16:40
728x90

최근 현업쪽에서 bcrypt 를 많이 쓴다고 한다. 

좀 살펴봤더니 귀찮게 salt 생성하고 같이 저장하는 방식이 아니라 한번 써볼거임

 

일단 bcrypt 라이브러리를 사용할 수 있게 터미널을 통해 설치한다. 

npm install bcrypt

salt 대신 같은 salt 를 몇번이나 여러번 돌릴지 횟수를 지정해줌 

const saltRounds = 10;
bcrypt.hash(beforePassword, saltRounds, (err, hash)=>{  // hash: afterPassword
        try {
            // db 에 회원정보 저장하는 코드
        } catch {
            console.log('err: ' + err);
        }
    })

그럼 hash 파라미터 부분에 암호화된 비밀번호가 저장되고 

해당값을 db 에 저장하여 사용하면 된다. 

암호 확인은 다음과 같다. 

bcrypt.compare(beforePassword, afterPassword, (err, result)=>{
        // result -> 암호맞음: true, 틀림: false
        try {
            if(result) {
                console.log('true'); // 로그인
            } else {
                console.log('false'); // 실패
            }
        } catch(err) {
            console.log(err);
        }
    })

 

** 비밀번호를 1234 라고 임의로 주고 테스트중인데 

afterPw: $2b$10$xy3SEyrzjyjOAPh8NIMn4OBb4dzjGSAneiQO91tPn508FU3s9gbvy
afterPw: $2b$10$IIFUlVxEAB./p.C6RCaHce9XeIfBohpUPK3gbTmj7O/as37tJHp1.
afterPw: $2b$10$y0hWxgrvrd69MGA4KBEft.B2SpriCQ5q2yY6UU5HdF5IodgGYDgyS

이런식으로 3번의 암호화 결과가 나왔다. 

위 암호 확인 코드 afterPassword 부분에 3개 값 다 넣어서 검증해봤는데 true 가 나왔고 

다른 값을 넣어봤는데 false 가 나왔다. 

서로 다른 salt 가 적용되었으니 같은 비밀번호라도 암호화 후가 다르게 나왔을거고

해당 인증 함수에는 salt 도, saltRounds 를 넣는 부분도 없는데 어떻게 

암호화 전 후의 비밀번호만으로 인증 여부를 확인하는지 궁금해졌다. 

-> 

구글링 해보니 암호화된 값 앞부분에 salting 에 대한 정보가 들어가있다고 한다. 

잘 보면 동일한 값이 앞부분에 들어가고 있는데 이 부분인듯.. 

해당 내용 관련해서는 아래 세번째 링크를 참고

 

 

 

https://goodmemory.tistory.com/95

 

[NodeJs] 사용자 비밀번호 암호화 하기 bcrypt

[NodeJs] 사용자 비밀번호 암호화 하여 저장하기 bcrypt nodeJs / javascript 로 구축한 웹서비스에 회원가입 및 로그인 기능을 추가하였을때 클라이언트의 아이디와 비밀번호를 서비스를 위해 데이터베

goodmemory.tistory.com

https://an-onymous.tistory.com/entry/bcrypt-Hashing%EC%9D%98-%EB%B3%B4%EC%95%88%EC%9D%84-%EB%8D%94-%EB%86%92%EC%9D%B8-Salting-Round

 

[bcrypt] Hashing의 보안을 더 높인 Salting Round

데이터베이스에 회원정보를 보관할 때, MD5같은 해시함수를 사용하면 상당한 보안을 갖출 수 있다. 하지만 유저가 비밀번호를 단순하게 설정한다면 말이 달라진다. 왜냐하면 해시함수는 서로 같

an-onymous.tistory.com

https://thinkforthink.tistory.com/211

 

bcrypt의 작동원리와 노드에서 사용하는 방법

1. 간단한 원리 bcrypt를 사용하면 매번 솔트가 달라지기 때문에 해시 역시도 달라지고 데이터베이스에 특정한 해시를 저장하더라도 보안에 문제가 되지 않는다. 해시가 그때그때마다 달라져 해

thinkforthink.tistory.com

 

 

 

 

 

https://4sii.tistory.com/32

 

Node.js, MongoDB 로 웹서비스 만들기 - 11. 회원가입, 로그인 - bcrypt

이전 게시글에서 bcrypt 를 이용해 암호화 하는 방법을 알아봤으니 기존에 있던 회원가입 로직을 받아낸 비밀번호를 암호화 한 이후에 동작하게 조합하였다. router.post('/register', (req, res) => { let id =

4sii.tistory.com

728x90