728x90
320x100
1. 비밀번호 암호화란?
비밀번호 **암호화(Encryption)**는 사용자의 비밀번호를 데이터베이스에 저장할 때 읽을 수 없는 형태로 바꾸는 것.
- 하지만 정확히 말하면, 우리가 흔히 사용하는 방식은 암호화(Encryption)가 아니라 해싱(Hashing).
- 해싱은 한 방향으로만 변환되는 방식이라 복호화(다시 원래 값으로 되돌리는 것)가 불가능
- 예를 들어, abc123 → e99a18c428cb38d5f260853678922e03 처럼 변환.
2. 왜 암호화(해싱)가 필요한가?
🙅 저장 시 평문(원래 비밀번호)을 쓰면 안 되는 이유
- 해커가 DB를 탈취하면 사용자 비밀번호가 그대로 노출됨.
- 사람들은 비밀번호를 여러 사이트에 재사용하기 때문에 2차 피해로 이어질 수 있음.
✅ 해싱을 하면?
- 설령 DB가 유출되어도 해커는 원래 비밀번호를 알 수 없음.
- 보안을 지키는 데 필수적인 조치
3. 구현방법
- Spring Security에서 BCryptPasswordEncoder(비크립트 패스워드 인코더)를 사용하여 구현
- BCrypt는 자동으로 Salt도 추가해주기 때문에 보안성이 더 높음.
- Salt : 같은 비밀번호라도 결과를 다르게 만드는 무작위 문자열 (BCrypt는 내부적으로 자동 적용)
1. 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
2. 설정 클래스에 Bean 등록
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
3. 회원가입 시 비밀번호 암호화
User user = User.builder()
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.build();
4. 로그인 시 비밀번호 비교
if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
- passwordEncoder.encode(raw)를 여러 번 호출하면 결과가 계속 다르므로 로그인 시 matches()로만 비교해야 함
BCryptPasswordEncoder를 사용하는 이유
- Salt 자동 적용 (같은 비밀번호라도 결과가 다름)
- 느린 계산으로 해킹 어렵게 만듦
- 스프링에서 공식 지원, 사용 편리
- 고정 길이 결과로 관리 쉬움
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[Git/Github] 혼자서 북 치고 장구치는 Branch, Merge 연습하기 (0) | 2025.04.28 |
---|---|
도커(Docker) (정의, 사용하는 이유, 설치법) (0) | 2025.04.22 |
[스프링 시큐리티] 서버 기반 인증 VS 토큰 기반 인증 (Session, JWT 등) (0) | 2025.04.21 |
[Spring] 단위 테스트에서 서비스 중심? 레파지토리 중심? (0) | 2025.04.18 |
[Spring JPA]JPA Repository란? (정의, 구조, 사용하는 이유, 사용법 등) (0) | 2025.04.18 |