본문 바로가기
💻 하나씩 차곡차곡/Back-end

[Spring Security] BCryptPasswordEncoder란? (정의, 사용하는 이유, 사용법 등)

by 뚜루리 2025. 4. 18.
728x90
320x100

🔐 BCryptPasswordEncoder란?

  • Spring Security에서 제공하는 비밀번호 해싱 클래스.
    • 즉, 회원가입 시 비밀번호를 안전하게 저장하고, 로그인 시 비밀번호를 안전하게 검증하기 위해 사용하는 암호화 도구
  • 비밀번호를 평문(plain text) 그대로 저장하는 게 아니라, 해시(hash) 처리해서 저장하도록 도와줌.
    • 해시: 복호화가 불가능한 일방향 변환

🔐 사용하는 이유

  • 비밀번호 평문 저장은 위험. 
    • BCrypt는 무작위 Salt 값을 매번 다르게 사용해서 같은 비밀번호도 매번 다른 값으로 암호화 됨.
    • 느린 연산을 일부러 하기 때문에, 무차별 대입 공격(Brute Force Attack)에 강함.

🔐 사용방법

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordExample {
    public static void main(String[] args) {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

        String rawPassword = "1234"; // 사용자가 입력한 비밀번호
        String encodedPassword = encoder.encode(rawPassword); // 암호화

        System.out.println("암호화된 비밀번호: " + encodedPassword);

        // 비밀번호 일치 여부 확인
        boolean isMatch = encoder.matches("1234", encodedPassword);
        System.out.println("비밀번호 일치 여부: " + isMatch);
    }
}

🔁 encode()와 matches() 차이

encode(rawPassword) 평문 비밀번호를 암호화함
matches(rawPassword, encodedPassword) 사용자가 입력한 평문과 암호화된 비밀번호가 일치하는지 확인함

❗주의할 점

  • encode()는 매번 다른 결과를 만들어냄 (Salt 때문)
  • 그래서 DB에는 암호화된 문자열을 그대로 저장하고, 로그인 시엔 matches()로 비교해야 함.
728x90
320x100