Spring Boot에서 BCrypt와 PasswordEncoder로 비밀번호 암호화하는 방법

2025. 2. 11. 20:02·Framework/Spring

 

 

 

 

웹 애플리케이션에서 사용자의 비밀번호를 암호화하지 않고 저장한다면 보안 문제가 발생할 수 있습니다.

데이터베이스가 해킹당하면 사용자의 비밀번호가 그대로 노출될 수 있기 때문입니다.

 

이를 방지하기 위해 Spring Boot 비밀번호 암호화 기능을 구현해야 합니다.

이번 글에서는 BCrypt와 PasswordEncoder를 사용해 비밀번호 암호화 및 비밀번호 검증 과정을 소개하겠습니다.

 

 

 


 

 

 

 

🔨 개발 환경 및 사전 준비

  1. Spring Boot 3.0+
  2. Java 11 이상
  3. Gradle 프로젝트
  4. at.favre.lib:bcrypt 라이브러리 사용

 

build.gradle에 의존성 추가

implementation 'at.favre.lib:bcrypt:0.10.2'

 

 

 


 

 

🔍 PasswordEncoder 클래스 구현하기

BCrypt 라이브러리를 사용해 비밀번호를 암호화하는 PasswordEncoder 클래스를 만들어 보겠습니다.

config 패키지에 클래스를 생성합니다.

 

import at.favre.lib.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Component;

@Component
public class PasswordEncoder {

    public String encode(String rawPassword) {
        return BCrypt.withDefaults().hashToString(BCrypt.MIN_COST, rawPassword.toCharArray());
    }

    public boolean matches(String rawPassword, String encodedPassword) {
        BCrypt.Result result = BCrypt.verifyer().verify(rawPassword.toCharArray(), encodedPassword);
        return result.verified;
    }
}

 

 

`encode(String rawPassword)` 

사용자가 입력한 원본 비밀번호를 BCrypt 알고리즘으로 암호화합니다.

 

`matches(String rawPassword, String encodedPassword)` 

암호화된 비밀번호와 입력한 비밀번호가 일치하는지 비교합니다.

 

 

 


 

 

 

💡 비밀번호 암호화를 서비스 계층에 적용 - 예시

비밀번호 암호화는 서비스(Service) 계층에서 처리하는 것이 좋은 설계 방식입니다.

아래 예제에서는 UserService에서 비밀번호 암호화와 검증을 구현해 보겠습니다.

 

@Service
public class UserService {

    private final PasswordEncoder passwordEncoder;

    public UserService(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    // 유저 정보 저장
    public void registerUser(String username, String rawPassword) {
    	// 입력한 비밀번호를 암호화된 비밀번호로 저장
        String encodedPassword = passwordEncoder.encode(rawPassword);
        System.out.println("암호화된 비밀번호: " + encodedPassword);
        }

    // 유저 정보로 로그인
    public boolean login(String username, String rawPassword, String storedEncodedPassword) {
        // 입력한 비밀번호와 암호화된 비밀번호가 동일한지 비교
        return passwordEncoder.matches(rawPassword, storedEncodedPassword);
    }
}

 

 

 


 

 

 

Spring Boot에서 비밀번호 암호화는 보안을 강화하고 사용자의 정보를 보호하는 핵심 요소입니다.

이번 글에서 BCrypt와 PasswordEncoder를 사용해 비밀번호를 암호화하고 검증하는 과정을 살펴보았습니다.

이 방식을 활용하면 데이터 유출 시에도 사용자의 비밀번호가 안전하게 보호됩니다.

 

이번 글에서는 비밀번호 암호화와 검증 방법을 살펴보았지만,

 더 나아가 Spring Security를 활용해 인증과 권한 관리를 함께 구성하는 것도 추천합니다.

예를 들어, 비밀번호 재설정 기능이나 JWT(JSON Web Token)를 이용한 토큰 기반 인증을 추가하면

더 완성도 높은 보안 구조를 구축할 수 있습니다.

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'Framework/Spring' 카테고리의 다른 글
  • 영속성 컨텍스트, JPA 기반 엔티티 관리 핵심 원리
  • [Spring] Filter로 로그인/로그아웃 구현하기
  • [Spring] Hibernate @Where 애노테이션 대신 @Filter로 특정 조건 조회하기
  • [Spring] 하이버네이트와 영속성 개념 완벽 이해 및 적용 방법
leonie.
leonie.
  • leonie.
    leveloper
    leonie.
  • 글쓰기 관리
    • 분류 전체보기
      • Language
        • Java
      • Git
      • CS
      • CodingTest
        • [프로그래머스] 자바
      • Framework
        • Spring
      • Information
      • DBMS
        • Redis
        • SQL
      • AWS
      • OS
        • Mac
      • 자격증
        • 정보처리기사
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    springboot
    Java
    스프링
    알고리즘
    정처기
    자바
    정보처리기사
    정처기필기
    프로그래머스
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
leonie.
Spring Boot에서 BCrypt와 PasswordEncoder로 비밀번호 암호화하는 방법
상단으로

티스토리툴바