bcrypt
는 한번 해싱하면 되돌릴 수 없는 단방향 해싱이다.
암호화 기법인 salt
와 키 스트레칭
을 사용해 기존 보안 방식보다 안전하다.
비밀번호에 추가 문자열을 붙여 암호화 하는 것이다.
비밀번호마다 다른 문자열을 추가하기 때문에 보안성이 높아진다.
salt
의 정보는 설정할 수 있으며, 매우 중요하기 때문에 잘 보관해야 한다.
여기에서 키 스트레칭이란 길이를 늘리는게 아닌, 해시함수를 반복해 출력 값이 아주 느리게 산출되도록 하는 방법이다.
해킹을 하는데 시간과 비용이 증가되기 때문에 반복횟수를 늘릴수록 보안이 강화된다.
사용법은 다음과 같다.
bcrypt.hash(mainPlainTextPassword, saltRounds)
사용법은 다양하지만, scheme.pre()
메서드를 이용해 저장되기전에 자동으로 해싱되게 하면 편하다.
userScheme.pre("save", async function () {
this.password = await bcrypt.hash(this.password, 5);
});
bycrypt.compare(mainPlainTextPassword, hash)
compare
함수는 true/false를 return하기 때문에 다음과 같이 변수를 만들고 이용하면 편하다.
const ok = bcrypt.compare(password, user.password);
저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!