Spring_17_Bcrypt 암호화

OngTK·2025년 10월 21일

Spring

목록 보기
17/25

🧂 Bcrypt 암호화 정리

Bcrypt는 비밀번호를 안전하게 저장하기 위한 단방향 해시 알고리즘으로,
Spring Security에서 기본 제공하는 BCryptPasswordEncoder를 사용함.


1️⃣ Bcrypt란?

  • 단방향 해시 알고리즘 (복호화 불가)
  • 해시 내부에 Salt 값이 자동 포함되어 있음
    → 동일한 비밀번호라도 매번 다른 결과 생성
  • 반복 연산(cost factor)으로 무차별 대입 공격(Brute-force)에 강함

2️⃣ 의존성 추가 (build.gradle)

implementation 'org.springframework.boot:spring-boot-starter-security'

별도의 보안 설정 없이 비밀번호 해시 기능만 사용할 수 있음.


3️⃣ PasswordEncoder Bean 등록

@Configuration
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        // 기본 strength = 10 (추천 범위 10~14)
        return new BCryptPasswordEncoder();
    }
}
  • cost 값이 높을수록 안전하지만, 연산 시간이 증가함.
  • 운영 환경에서는 보안 수준과 성능을 모두 고려하여 조정 필요.

4️⃣ Bcrypt 사용 예시 (Service 단)

@Service
@RequiredArgsConstructor
public class UserService {

    private final PasswordEncoder passwordEncoder;
    private final UserRepository userRepository;

    // [1] 회원가입 - 비밀번호 암호화
    public Long register(UserSignupRequest req) {
        // 1. 평문 비밀번호 해시화
        String hashed = passwordEncoder.encode(req.getPassword());

        // 2. 엔티티 생성 및 저장
        User user = User.builder()
                .email(req.getEmail())
                .password(hashed)
                .name(req.getName())
                .build();

        userRepository.save(user);
        return user.getId();
    }

    // [2] 로그인 - 평문 vs 해시 비교
    public boolean login(String email, String rawPassword) {
        User user = userRepository.findByEmail(email)
                .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자"));

        // matches(평문, 해시) → true / false 반환
        return passwordEncoder.matches(rawPassword, user.getPassword());
    }
}

5️⃣ 주요 메서드 요약

메서드설명
encode(rawPassword)평문 → 해시 문자열 변환
matches(raw, encoded)평문 vs 해시 비교 (boolean 반환)

6️⃣ 보안 권장 사항

  • 비밀번호 평문 저장 금지
  • 비밀번호 변경 시 항상 재해시 후 저장
  • bcrypt 자체에 salt 포함 → 추가 salting 불필요
  • 서버 성능에 맞춰 cost 주기적 재평가 (보통 10~12 사이)
  • 암호화/비교 로직은 Service Layer 내에서만 처리

✅ 핵심 요약

항목설명
암호화 알고리즘Bcrypt (단방향 해시, salt 자동 포함)
제공 클래스BCryptPasswordEncoder
주요 기능비밀번호 해시 / 검증
보안 포인트평문 저장 금지, cost 재평가, 해시 재생성
위치Spring Service 단

profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글