본문 바로가기
TIL

[TIL] bcrypt.hash와 bcrypt.compare

by 쾌횽 2024. 2. 15.
반응형

🧐 bcrypt.hash

우리가 기본적인 회원 가입을 진행할때, 비빌 번호와 같은 정보는 민감하기 때문에 유출에 더욱 신경을 써야한다.

혹여나, 유출이 되었더라도 비밀 번호를 해독하지 못하는 형태로 변형 시켜 데이터베이스에 저장해 주어야 한다.

 

이러한 작업을 해싱이라하는데, 특정 알고리즘을 통해 인간이 해독하지 못하는 문자열로 만들어주는 작업이다.

해싱은 특징은,

  1. 단방향이다. 
    원래대로 다시 되돌리는 것이 불가능하다.
    어떠한 특정한 문자열을 해쉬 문자열로 변형은 가능하지만, 해쉬 문자열을 특정 문자열로 되돌리는 것은 불가능하다
  2. 동일한 값에 동일한 출력값을 가진다.
    어떠한 특정 문자열을 계속 여러번 해쉬를 해봐도 동일한 값을 출력한다.
  3. . 특정 문자열이 조금만 바뀌어도 전혀 다른 값의 결과를 출력한다.
    특정한 문자 hello를 해쉬하는 것과 Hello의 해쉬 값이 완전히 다르다.

🧐  bcrypt.compare

사용자로부터 입력 받은 비밀번호를 암호화하여 기존 암호화된 비밀번호와 salt를 제외한 부분을 비교하는 것이다.

const comparedPassword = await bcrypt.compare(password, user.password)

 

첫 번째 파라미터의 password는 평문 비밀 번호이고, 두 번째는 해쉬화된 유저의 비밀번 호이다.

compare()는 password와 user.password가 같다면 true값을 반환하고, 다르다면 false를 반환한다.

그래서 기존의 비밀 번호가 맞는지에 대한 로직을 작성할때 사용된다.

반응형

댓글