엄지월드

Spring security bcrypt 암호화 하기 본문

java/Spring

Spring security bcrypt 암호화 하기

킨글 2017. 5. 7. 13:00

필자는 spring security에서 어떻게 하면 간단하게 암호화를 도입할 수 있을까 고민하던 중 좋은 정보를 찾게 되었다.

그것은 security-context.xml에서 일부분의 소스만 추가해주면 된다는 것이었다!

 

방법 - 1

먼저, 데이터베이스에 입력이 되는 Controller를 살펴보자.

 

 

먼저,

@Autowired 

    private BCryptPasswordEncoder bcryptPasswordEncoder;

를 추가해서 bcryptPasswordEncoder 속성을 가져온다.

 

 

user.setPassword(this.bcryptPasswordEncoder.encode(user.getPassword()));  

-> user.getPassword()로 패스워드를 가져와 bcrypt로 인코딩을 해서 user.setPassword로 넣어준다.

그리고 나서 userMapper.insertUser(user);를 이용해 DB에 INSERT 한다.

 

방법 - 2

user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt(10))); 

-> 숫자가 높아질수록 해쉬를 생성하고 검증하는 시간은 느려진다. 즉, 보안이 우수해진다. 하지만 그만큼 응답 시간이 느려지기 때문에 적절한 숫자를 선정해야 한다. 기본값은 10이다. ( 입력하지 않으면 10으로 인식한다 )



 

그러면 회원가입을 했을 때 DB에 아래와 같이 들어가게 된다. 모두 비밀번호를 1234로 가입한 결과이다.

 

이제 DB에 bcrypt로 암호화 하여 집어넣었으니, 로그인 하는 방법을 알아보자!

 

<bean id ="bcryptPasswordEncoder" class = "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

-> BCrypt로 인코딩 하기 위해 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder의 정보를 가져와 bcryptPasswordEncoder으로 id를 저장한다.

 

<sec:password-encoder ref="bcryptPasswordEncoder"/> 

-> ref 위치에 bean 에서 id로 가져온 bcryptPasswordEncoder 을 입력해서 참조할 위치를 알려준다.

 

이렇게 설정하면 로그인 페이지에서 아이디와 비밀번호를 입력하면 값을 받아와서 bcrypt 암호화로 인코딩 한 뒤에 DB의 값과 비교한다.

 

 

 

도움이 되셨다면 광고 한번씩 클릭 부탁드립니다 😁

 

Comments