[Spring Security] BCryptPasswordEncoder란?

김현정·2025년 4월 1일
0

1.BCryptPasswordEncoder란?

BCryptPasswordEncoder는 Spring Security 프레임워크에서 제공하는 클래스로 비밀번호를 암호화(해시)하는 데 사용한다.
BCrypt는 단순히 입력을 1회 해시시키는 것이 아니라 솔트(salt)를 부여하여 여러 번 해싱하므로 더 안전하게 암호를 관리할 수 있다.

BCrypt는 같은 비밀번호를 암호화하더라도 해시 값은 매번 다른 값이 도출된다.

따라서 BCryptPasswordEncoder에서는 사용자가 제출된 비밀번호와 암호화되어 저장된 비밀번호의 일치 여부를 확인하는 메소드가 제공된다.

BCrypt는 강력한 해시 알고리즘으로, 비밀번호를 단반향으로 암호화한다.
즉, 암호화 된 비밀번호는 다시 복호화 할 수 없고, 비교를 위해서는 같은 값으로 암호화 된 비밀번호를 비교해야 한다.

Salting : BCrypt는 자체적으로 salt를 생성하여 비밀번호를 암호화합니다. salt는 암호화된 값에 랜덤한 값을 추가하여 동일한 비밀번호라도 매번 다른 결과를 생성하게 만듭니다. 이는 무차별 대입 공격(brute force attacks)이나 레인보우 테이블 공격을 막는 데 도움이 됩니다.

BCryptPasswordEncoder를 사용하려면 의존성을 추가해야한다.

Gradle 의존성 예시 :

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

BCryptPasswordEncoder 사용 방법

  • 비밀번호 암호화: encode() 메서드를 사용하여 비밀번호를 암호화합니다.

  • 비밀번호 확인: matches() 메서드를 사용하여 입력된 비밀번호와 암호화된 비밀번호를 비교합니다.

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

@Component
public class PasswordEncoder {

	// 비밀번호를 암호화하는 메소드
    public String encode(String rawPassword) {
    	// BCrypt 알고리즘을 사용해 비밀번호를 암호화
        return BCrypt.withDefaults().hashToString(BCrypt.MIN_COST, rawPassword.toCharArray());
    }

	// 입력한 비밀번호와 암호화된 비밀번호가 일치하는지 확인하는 메소드
    public boolean matches(String rawPassword, String encodedPassword) {
        // BCrypt로 암호화된 비밀번호와 입력한 비밀번호를 비교
        BCrypt.Result result = BCrypt.verifyer().verify(rawPassword.toCharArray(), encodedPassword);
        return result.verified; // 비밀번호가 일치하면 true 반환
    }
}

0개의 댓글