-
[Node.js] bcrypt로 비밀번호 암호화하기Frontend/일요스터디 2023. 1. 8. 23:06
일요일에 모여 하는 스터디로 공부하고 싶은 주제를 정해 스터디원과 함께 공유하는 시간을 갖습니다. 비밀번호를 암호화하지 않고 저장하게 되면 데이터베이스에 비밀번호가 그대로 노출되게 됩니다. 이는 보안상 매우 위험할 수 있기 때문에 암호화에 대한 개념과 bcrypt를 통해 비밀번호 암호화 하는 방법에 대해 알아봅시다.
암호화
암호화는 코딩된 알고리즘, 해시, 서명 사용을 통해 정보를 보호하는 방식입니다.
해시 함수
해시 함수는 평문을 암호화된 문장으로 만들어 주고 암호화된 값으로부터 복호화를 할 수 없는 단방향 암호화 기법입니다.
해시 알고리즘은 같은 입력 값에 대해 항상 같은 리턴 값을 출력합니다.
bcrypt
비밀번호 암호화를 위한 단방향 해시 함수로 강력한 해시 알고리즘입니다.
bcrypt 설치하기
npm install bcrypt
비밀번호 해시하기
salt는 평문 데이터에 의미 없는 데이터를 추가하는데 값이 높을수록 암호화 연산이 증가하며 속도는 느려집니다.
export const createUser = async (req, res) => { const { email, password } = req.body; const SALT_ROUND = 10; const hashedPassword = await bcrypt.genSalt(SALT_ROUND, function(error, salt) { bcrypt.hash(password, salt); }) const user = new User({ email, password: hashedPassword, }); // ... };
비밀번호 검증하기
bcrypt.compare를 통해 비밀번호 해시 값을 비교할 수 있습니다.
export const loginUser = async (req, res) => { const { email, password } = req.body; const user = await User.findOne({ email }); // ... const matchedPassword = await bcrypt.compare(password, user.password); // ... };
참고 자료
https://www.npmjs.com/package/bcryptjs
https://velog.io/@sangmin7648/Bcrypt%EB%9E%80
반응형'Frontend > 일요스터디' 카테고리의 다른 글
[MERN] MongoDB + Express + React + Node + Typescript 백엔드 설정하기 (0) 2023.01.01 Webpack으로 React 개발환경 설정하기 (0) 2022.12.04