bycrypt
비밀번호를 hash하거나 hash를 검증하는 라이브러리
Hash란?
문자열을 되돌릴 수 없는 방식으로 암호화하는 방법. 출력값으로 해시화 이전의 값을 알아낼 수 없다.
설치
npm install bycrypt
hash
const bcrypt = require("bcrypt");
const { User } = require("../model/user.js");
app.post("/sign_up", async (req, res) => {
const { email, password } = req.body;
const saltRound = 10;
const hashedPassword = await bcrypt.hash(password, saltRound);
// 실무에서는 에러 처리가 필수
await User.create({ email, password: hashedPassword });
}
)
Salt Round ?
bcrypt가 비밀번호를 해싱할 때 사용하는 salt의 복잡성이다. salt는 해시를 생성하기 위해 추가되는 무작위 데이터로, 같은 비밀번호라도 매번 다른 해시값을 생성한다. 이로 인해 동일한 비밀번호라도 매번 다른 해시가 생성되어 보안성이 높아지며, 값이 높을 수록 복잡성도 높아진다.
compare
const bcrypt = require("bcrypt");
const { User } = require("../model/user.js");
app.post("/sign_in", async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
isPasswordCorrect = await bcrypt.compare(password, user.password); // 불리언 값 반환
// 이후 검증 성공시 토큰 발급과 같은 로직 구현, 검증 실패 시 에러 처리
}
)