티스토리 뷰
1. 요구사항
구현된 프로젝트에서 사용자가 지정한 비밀번호 값은 입력한 문자열 그대로 저장이 된다.
보안을 위해 해시값을 저장할 예정이고 SHA-256를 사용하려고 한다.
2. 해결 방법
수정이 필요한 API는 회원가입, 로그인, 비밀번호 재발급이다.
비밀번호 암호화에 대해 궁금증이 생겼다... 바로 salt값에 대한 것.
salt값을 사용해서 무작위 공격을 방어한다고 배웠는데 그럼 salt값은 어디에 저장되는걸까?
답은 이 블로그에서 얻었다.
따로 정리하고 싶지만 지금은 개발이 급하기에 패스!
구현에 BCryptPasswordEncoder 클래스를 사용하려고 한다. salt 생성하고, 해시값에 붙여주고 비교해주는 것까지 해결해준다. 아래는 해당 클래스의 주요 메서드이다.
- encode(CharSequence rawPassword):
- 비밀번호 암호화 메소드입니다.
- 사용자가 입력한 원본 비밀번호(rawPassword)를 BCrypt 방식으로 암호화합니다.
- 이 과정에서 자동으로 salt를 생성하여 비밀번호와 함께 사용해 안전한 해시를 만듭니다.
- 결과는 암호화된 문자열로 반환됩니다.
- matches(CharSequence rawPassword, String encodedPassword):
- 비밀번호 검증 메소드입니다.
- 사용자가 입력한 비밀번호(rawPassword)와 저장된 암호화된 비밀번호(encodedPassword)가 일치하는지 확인합니다.
- 입력된 비밀번호를 다시 암호화한 후, 주어진 암호화된 비밀번호와 비교하여 일치 여부를 반환합니다.
- 일치하면 true, 그렇지 않으면 false를 반환합니다.
3. 코드
build.gradle에 아래 의존성을 추가한다.
// Spring Security 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
비밀번호 암호화가 필요한 곳에 아래 코드를 작성한다.
// 인스턴스 생성
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
// 비밀번호 저장시
member.setPassword(bCryptPasswordEncoder.encode(signUpDto.getPassword()));
// 입력 받은 비밀번호와 비교시
// 다르면 예외 발생
if(!bCryptPasswordEncoder.matches(signInDto.getPassword(), member.getPassword())) {
throw new CustomException(ErrorCode.INVALID_MEMBER);
}
4. 결론
salt값, BCrytPasswordEncoder 클래스 등 비밀번호 암호화에 사용되는 좋은 기술을 익힐 수 있었다.
salt값이 비밀번호 값에 함께 저장되서 후에 해당 salt값을 추출하고...하는 과정은 아직 모호하게 느껴진다.
비밀번호 암호화 뿐만아니라 OAuth, JWT 등 Spring Security의 핵심적인 기술을 제대로 익혀보고 싶다.
추가) 테스트 성공했다!

'Web > Spring' 카테고리의 다른 글
[Spring/JWT] Session 인증 → JWT 인증 (0) | 2024.07.19 |
---|---|
[Spring/JPA] 영속성 컨텍스트(Persistence Context) (0) | 2024.05.21 |
MyBatis 작동 원리와 SqlSession (0) | 2024.05.18 |
JDBC Template / 조회, 람다식 활용 (0) | 2024.05.13 |
내가 아는 선의 Spring Data JPA 정리 (1) | 2024.05.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴과
- 아이엘츠
- 안드로이드
- 자바 1004번
- BFS
- 컴퓨터학과
- 생활코딩
- 스프링 강의
- 리트코드 1768
- 리트코드 1768 해석
- RDD
- 그리디 알고리즘
- 코딩
- 웹
- 컴공
- 프로그래밍
- bcrypaswordencoder
- 동덕여대 컴퓨터학과
- 알고리즘
- 자바
- 백준9375번
- 자바 9375
- 동덕여대
- 코틀린
- 백준
- 개발
- 백준 1004
- 스파크
- 백준 2108
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함