본문에 들어가기 앞서, 암호화와 해시화에 대해서 구분할 필요가 있다.
암호화(Encryption) 와 해시(Hash) 는 모두 암호화 기법에 해당하지만 방향성에서 차이를 보인다.
Bcrypt
npm install bcrypt
import bcrypt from "bcrypt"
const hashingPW = async (params: { password: string }) => {
const { password } = params
const saltRounds = 10
// salt 생성
const salt = await bcrypt.genSalt(saltRounds)
// hash
const hashedPw = await bcrypt.hash(password, salt)
return {
status: 201,
data: { salt, hashedPw },
}
}
Salt
는 사용자의 비밀번호에 난수를 추가하여 함께 해시 함수를 돌려 보안을 높이는 매개변수이다. const fakePassword = "bye"
//compare
const firstCompare = await bcrypt.compare(password, hashedPw)
const secondCompare = await bcrypt.compare(fakePassword, hashedPw)