안녕하십니까
비굴이입니다!
항해99를 하면서 여러가지 파일을 만들고 작업을 하다보니
암호화의 필요성을 느꼈습니다.
특히 비밀번호를 저장하는 경우에는 암호화가 더욱 중요했습니다.
그래서 검색결과 bcypt 모듈을 알게 되었고
보안 부분에서 엄청나게 강력한 모듈이며,
1999년에 만들어졌지만 지금까지도 가장 많이 쓰이기에 이를 적용해보고자 합니다.
우선 모듈을 설치해줍니다.
npm install bcrypt
우선 bcrypt 모듈을 불러온 다음에
비밀번호를 임의로 지정해줍니다.
salt를 사용하게 되는데 여기에 들어가는 숫자는 값이 높을 수록 암호화 연산이 증가하며,
대신 숫자가 커질 수록 속도가 느려지는 단점이 있습니다.
그리고 hash를 이용하여 암호화된 비밀번호가 나타납니다.
const bcrypt = require('bcrypt');
const passwrod = '1234';
const salt = bcrypt.genSalt(10);
const hashedPassword = bcrypt.hash(password, salt)
console.log(hashedPassword)
//$2b$10$Va60iaaC3knenNTprGHvMuJhkk3ml11Rx3Dq20n6SFDuWEnL3XxuG
그런데 bcyprt는 같은 값을 저장하여도 매번 값이 다르게 저장됨을 확인할 수 있었습니다.
때문에 비밀번호를 검증할 때에 저장되어 있는 데이터와
기존의 비밀번호와 똑같이 입력 후에 암호화한 데이터가 다른 것을 확인할 수 있었습니다.
때문에 bcrypt에서는 검증을 따로 해주어야 했습니다.
compare로 앞에는 기존 입력한 비밀번호와 같은 값을, 뒤에는 암호화된 값을 넣어줍니다.
true 혹은 false로 나오기 때문에 이를 활용하여 검증을 하면 됩니다.
const bcrypt = require('bcrypt');
const passwrod = '1234';
const salt = bcrypt.genSalt(10);
const hashedPassword = bcrypt.hash(password, salt)
const checkPassword = bcrypt.compare(password, hashedPassword)
console.log(checkPassword)
//true
암호화 및 검증에서 중요한 것은 동기화 작업이 필요하는 것입니다.
여기에 쓰진 않았지만 async와 await를 활용하여서
각각의 기능이 동기적으로 작동할 수 있게 작업해줘야 합니다.
계속해서 쓰는 모듈이므로 더 공부해서 사용해야겠습니다!
TIL 2023.1.29 카카오 소셜 로그인 작동 방식 이해하기 (0) | 2023.02.01 |
---|---|
TIL 2023.1.11 node js sequelize include 활용한 join하기 오류해결 (0) | 2023.01.12 |
TIL 2023.1.6 [node.js / sequelize] config.js에서 createAt, updateAt 한국시간으로 바꾸기 (0) | 2023.01.06 |
TIL 2022.12.31 Node.js Mongo DB mongoose로 연결실패 에러 해결(윈도우) (0) | 2022.12.31 |
TIL 2022.12.13 카카오톡 공유하기 버튼 만들기 (0) | 2022.12.13 |