일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- nodejs
- JavaScript
- Express
- Nest.js
- dfs
- 게임
- AWS
- Python
- cookie
- TypeScript
- typeORM
- OCR
- 정렬
- flask
- Bull
- MongoDB
- 공룡게임
- class
- Dinosaur
- nestjs
- mongoose
- jest
- Sequelize
- react
- MySQL
- GIT
- 자료구조
- Queue
- game
- Today
- Total
포시코딩
Node.js, MongoDB 로 웹서비스 만들기 - 10. 회원가입(2) - bcrypt 암호화 본문
최근 현업쪽에서 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
[bcrypt] Hashing의 보안을 더 높인 Salting Round
데이터베이스에 회원정보를 보관할 때, MD5같은 해시함수를 사용하면 상당한 보안을 갖출 수 있다. 하지만 유저가 비밀번호를 단순하게 설정한다면 말이 달라진다. 왜냐하면 해시함수는 서로 같
an-onymous.tistory.com
https://thinkforthink.tistory.com/211
bcrypt의 작동원리와 노드에서 사용하는 방법
1. 간단한 원리 bcrypt를 사용하면 매번 솔트가 달라지기 때문에 해시 역시도 달라지고 데이터베이스에 특정한 해시를 저장하더라도 보안에 문제가 되지 않는다. 해시가 그때그때마다 달라져 해
thinkforthink.tistory.com
Node.js, MongoDB 로 웹서비스 만들기 - 11. 회원가입, 로그인 - bcrypt
이전 게시글에서 bcrypt 를 이용해 암호화 하는 방법을 알아봤으니 기존에 있던 회원가입 로직을 받아낸 비밀번호를 암호화 한 이후에 동작하게 조합하였다. router.post('/register', (req, res) => { let id =
4sii.tistory.com
'Node.js' 카테고리의 다른 글
Node.js, MongoDB 로 웹서비스 만들기 - 12. 로그인(1) - passport (0) | 2022.06.27 |
---|---|
Node.js, MongoDB 로 웹서비스 만들기 - 11. 회원가입, 로그인 - bcrypt (0) | 2022.06.26 |
Node.js, MongoDB 로 웹서비스 만들기 - 9. 회원가입(1) - INSERT (3) | 2022.06.10 |
Node.js, MongoDB 로 웹서비스 만들기 - 8. Ajax 로 post 요청 (0) | 2022.06.10 |
Node.js, MongoDB 로 웹서비스 만들기 - 7. MongoDB 세팅 및 연결(2) (0) | 2022.06.09 |