본문 바로가기
프로젝트

[SuiteCare / Spring Security] Password Encoder(비밀번호 암호화하기)

by 네모세모동동 2024. 5. 20.

1. Spring Securiy 의존성 주입

gradle에 spring-security를 추가한다.

 

[build.gradle]

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-security'
}

 

 

2. config 설정

@Configuration : 설정파일이라는 것을 알려주는 어노테이션
@Bean : 빈으로 등록하는 어노테이션 (return 타입이 주입됨)

 

@Configuration
public class SecurityConfig {

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

 

 

3. 암호화하기

String encode(CharSequence rawPassword)
class PasswordEncoderTest {

    @Autowired
    PasswordEncoder passwordEncoder;

	public void passwordEncoder {
    	String originPassword = "1234";
		String encodedPassword = passwordEncoder.encode(originPassword);

		System.out.println(encodedPassword);
	}
}

 

결과

$2a$10$u1uN2nOehZ9chk4VU4rTB.a4sbWeKD5WGgoefPcTfe6HBjySa4Ab.

 

 

4. 로그인 시 입력하는 비밀번호와 맞는지 확인하기

class PasswordEncoderTest {
    
    @Autowired
    PasswordEncoder passwordEncoder;
    
    public void passwordEncoder {
        String encodedPassword1 = passwordEncoder.encode("1234");
        String encodedPassword2 = passwordEncoder.encode("1234");

        System.out.println(encodedPassword1);
        System.out.println(encodedPassword2);
    }
}

 

결과

$2a$10$VXIddKgmJdrrB0pGFE6kmuPEC2S/zdVqdczqbsY9jiEELW0W8xhoi

$2a$10$FC.QNUevmqhyHyBK7EdOWO3S0qbbULhNzBb7LIb8lCi/23jxl9Yzu

 

같은 비밀번호 1234를 암호화했지만 결과는 다르게 나오는 걸 확인할 수 있다.

그러면 저장해놓은 암호화한 비밀번호와 로그인 시 입력한 비밀번호를 어떻게 비교할 수 있을까?

 

 

PasswordEncoder의 matches() 함수를 쓰면 확인해볼 수 있다.

 

boolean matches(CharSequence rawPassword, String encodedPassword)
class PasswordEncoderTest {
	public void login(String inputPassword) {
    	String dbPassword = "$2a$10$u1uN2nOehZ9chk4VU4rTB.a4sbWeKD5WGgoefPcTfe6HBjySa4Ab.";
        
    	boolean matchResult = passwordEncoder.matches(inputPassword, dbPassword);
        
        System.out.println(matchResult); // 결과 : true
    }
 }

 

📍dbPassword는 db에 저장되어 있는 비밀번호를 가져오면된다.

 


[출처]