HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💌
JJong’s Archive
/
bcrypt 라이브러리(해쉬)

bcrypt 라이브러리(해쉬)

날짜
Dec 23, 2024 11:02 PM
: 암호화된 비밀번호를 안전하게 저장하고 검증하기 위해 설계된 비밀번호 해싱 알고리즘 및 이를 구현한 라이브러리
⇒ 즉, 비번 → 해쉬($2b$10$R9h/cIPz0gi.URNNX3kh2O.PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW 형태)로 만들어줌
 

특징

  1. Blowfish 기반 설계 : Blowfish 암호 알고리즘
  1. Salt 사용 ⇒ 고유한 랜덤 데이터인 salt를 생성 후 비번과 결합
    1. : 같은 비번이라도 다른 해시 생성으로 레인보우 테이블 공격 방어
  1. 적응형 알고리즘 ⇒ 인자로 연산 횟수 지정 가능
  1. 느린 연산 속도 ⇒ 의도적으로 느리게 설계, 브루트 포스 공격에 대응
 
npm i bcrypt
npm i —save-dev @types/bcrypt

사용 예시

  1. 해싱 (비번 → 해쉬)
    1. import bcrypt from "bcrypt" // 비동기 방식으로 해싱 await bcrypt.hash(비번, 연산횟수, (err, hash) => { if (err) throw err; console.log('Hashed password:', hash); // 이 hash 값을 데이터베이스에 저장 });
  1. 검증 비교 (해쉬 → 비번)
    1. (비교만 가능할 뿐, 해쉬 → 비번으로 해독 불가)
      // 비동기 방식으로 비교 await bcrypt.compare(비번, 해쉬, (err, result) => { if (err) throw err; if (result) { console.log('Passwords match!'); } else { console.log('Passwords do not match.'); } });
       
 

FYI
  • 레인보우 테이블 공격
    • : 해쉬 ↔ 비번 매칭 테이블로 역추적(해쉬 → 비번)하는 공격 방식
  • 브루트 포스 공격
    • : 가능한 모든 조합을 하나씩 대입하여 비번 찾는 공격 방식