비밀번호 암호화 하는 이유
DB에 나의 비밀번호가 암호화 하지 않고 그대로 저장을 하게 되면,
해커가 DB를 통해서 나의 비밀번호를 알게 되고 나의 계정을 마음대로 사용할 수 있게 되버린다.
이를 막기위해서 비밀번호를 암호화를 한다.
비밀번호 암호화의 종류
- 양방향 암호화: 암호화된 데이터에 대한 디코딩(decoding)이 가능한 암호화 방식.
(ex) 대칭키, 공개키 <자세한건 나중에 정리>- 디코딩 : 부호화(encoding)된 암호를 부호화 되전의 상태로 돌려 사람들이 읽을 수 있도록 하는 것
- 단방향 암호화 : 암호화된 데이터에 대한 디코딩이 불가능한 암호화 방식.
(ex) Hash, MAC <자세한건 나중에 정리>
비밀번호 암호화하는 과정 ( 단방향 암호화방식)
설치 및 생성
// express 프로젝트 생성
npm i init
npm i express
// 암호화 라이브러리 설치
npm i bcrypt
* bcrypt: hash 방식으로 암호화하는 것을 도와주는 라이블러리, password-hashing function
hasing 이란 → 주어진 값을 다른 값으로 변형시키는 것이다. 이때 사용되는 수학적 알고리즘에 따라 변형된 값이 생성된다.
코드 예시
const express = require('express');
const bcrypt = require('bcrypt');
const app = express();
app.use(express.json());
const port = 3000;
const users = [];
// 회원가입
app.post('/sign-up', async (req, res) => {
const { username, password } = req.body;
// 비밀번호 해시화
const saltRounds = 10; // salt: 설정한 password를 복잡하게 변경시키는 것, 이것을 10번 실행
const hashedPassword = await bcrypt.hash(password, saltRounds);
// 임시로 사용자 정보 저장
const newUser = {
username: username,
password: hashedPassword,
};
users.push(newUser);
return res.status(201).send(newUser);
});
// 로그인
app.post('/sign-in', async (req, res) => {
const { username, password } = req.body;
// 등록된 사용자인지 확인
const user = users.find(user => user.username === username);
if (!user) {
return res.status(401).send({ message: '등록되지 않은 사용자입니다.' });
}
// 저장된 해시화된 비밀번호와 입력된 비밀번호 비교
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) {
return res.status(401).send({ message: '비밀번호가 일치하지 않습니다.' });
}
// Access Token 발급 로직으로 교체하기
return res.status(200).send({ accessToken: "ACCESS_TOKEN" });
});
app.listen(port, () => {
console.log(`앱이 http://localhost:${port} 에서 실행 중입니다.`);
});
'프로그래밍 > Node.js' 카테고리의 다른 글
API 문서를 작성하는 이유 (0) | 2023.11.29 |
---|---|
[예제] 인증 및 인가(JWT), 암호화 (1) | 2023.11.19 |
JWT 기본 개념/인증,인가 (0) | 2023.11.07 |
[Sequelize] DB연결 에러 (0) | 2023.08.07 |
[Sequelize] ORM for SQL : 설치 및 DB연결 (0) | 2023.08.07 |