728x90
320x100
🔐 BCryptPasswordEncoder란?
- Spring Security에서 제공하는 비밀번호 해싱 클래스.
- 즉, 회원가입 시 비밀번호를 안전하게 저장하고, 로그인 시 비밀번호를 안전하게 검증하기 위해 사용하는 암호화 도구
- 비밀번호를 평문(plain text) 그대로 저장하는 게 아니라, 해시(hash) 처리해서 저장하도록 도와줌.
- 해시: 복호화가 불가능한 일방향 변환
🔐 사용하는 이유
- 비밀번호 평문 저장은 위험.
- BCrypt는 무작위 Salt 값을 매번 다르게 사용해서 같은 비밀번호도 매번 다른 값으로 암호화 됨.
- 느린 연산을 일부러 하기 때문에, 무차별 대입 공격(Brute Force Attack)에 강함.
🔐 사용방법
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class PasswordExample {
public static void main(String[] args) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String rawPassword = "1234"; // 사용자가 입력한 비밀번호
String encodedPassword = encoder.encode(rawPassword); // 암호화
System.out.println("암호화된 비밀번호: " + encodedPassword);
// 비밀번호 일치 여부 확인
boolean isMatch = encoder.matches("1234", encodedPassword);
System.out.println("비밀번호 일치 여부: " + isMatch);
}
}
🔁 encode()와 matches() 차이
encode(rawPassword) | 평문 비밀번호를 암호화함 |
matches(rawPassword, encodedPassword) | 사용자가 입력한 평문과 암호화된 비밀번호가 일치하는지 확인함 |
❗주의할 점
- encode()는 매번 다른 결과를 만들어냄 (Salt 때문)
- 그래서 DB에는 암호화된 문자열을 그대로 저장하고, 로그인 시엔 matches()로 비교해야 함.
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[Spring] 단위 테스트에서 서비스 중심? 레파지토리 중심? (0) | 2025.04.18 |
---|---|
[Spring JPA]JPA Repository란? (정의, 구조, 사용하는 이유, 사용법 등) (0) | 2025.04.18 |
[Spring/JPA] Auditing 기능이란? (정의, 사용법, 사용하는 이유 등) (0) | 2025.04.18 |
프로젝트 패키지 구조 : 레이어 중심 VS 도메인 중심 (0) | 2025.04.18 |
[Spring] @Builder란? (Feat. 정적 생성 메서드) (0) | 2025.04.18 |