[보안] BCrypt 사용하여 비밀번호 암호화 with DI

Halo·2025년 5월 27일
1

JAVA/Spring

목록 보기
10/15
post-thumbnail

🛠️ 환경

항목Env Info
🖥️ 서버Tomcat
🍭 프레임워크Spring Boot
📀 데이터베이스MySQL with Azure
📝 JPAHibernate
🙈 외부 라이브러리lombok, thymeleaf, AJAX
📏 디자인 패턴MVC

👀 방법

가. 해싱해서 비밀번호 저장

new BCryptPasswordEncoder().encoder(password)

bCrypt 어원
b: Blowfish 암호화 알고리즘에서 유래
crypt: 유닉스 계열에서 비밀번호 해싱에 사용된 crypt() 함수에서 유래

즉, BCrypt는 Blowfish 기반의 crypt 함수이며 단방향 해쉬 알고리즘이다.

하지만 매번 BCryptPasswordEncoder 객체를 뽑는것은 메모리 측면에서 비효율적이므로, Spring의 bean을 사용하여 Dependency Injection을 사용하기로 한다.

bean : 스프링이 대신 뽑아준 오브젝트

@Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

위의 코드를 config 파일에 작성해주고, 아래와 같이 사용

private final PasswordEncoder passwordEncoder;
member.setLoginPw(passwordEncoder.encode(loginPw));


😏 느낀점

Dependency Injection을 사용함으로서 비밀번호의 인코더 방식을 편하게 바꿔줄 수 있다. 만약 DI(Dependency Injection)를 사용하지 않으면

private final PasswordEncoder passwordEncoder;

해당 비즈니스 로직 안의 부분을 직접 수정해줘야하지만,

DI를 사용하면 Config 파일 안의, 아래부분의 BCryptPasswordEncoder() 만 바꿔주면 되는 것이다.

@Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
profile
새끼 고양이 키우고 싶다

0개의 댓글