bcrypt를 이용해 비밀번호 암호화하기 (Spring / Maven)

Jiwoo Yi·2021년 3월 1일
0
post-thumbnail

비밀번호 암호화에 대한 고민

이번에 토이 프로젝트를 진행하면서 비밀번호 암호화에 대한 새로운 방법을 고민 중이었다. 이전에 하던 프로젝트는 그냥 MD5를 사용했지만, 이번 프로젝트는 배포까지 해 볼 예정이라 좀 더 안전한 암호화 방법이 필요했다. 열심히 구글링을 해보다 bcrypt라는 라이브러리가 있다는 것을 알게 되었다!

bcrypt?

Bcrypt는 내부에서 랜덤으로 salt를 생성하여 이를 평문에 붙이고 해싱을 해주는 기능으로, spring-security에서 제공 중이다.
연산속도가 느리기 때문에 SHA와 다르게 보안에 취약하지 않다는 장점이 있다.

방법

1. pom.xml 변경

https://mvnrepository.com/

먼저, 위의 주소로 들어가서 spring-security를 검색해 pom.xml에 core, web, config를 추가해준다.
중요한 것은 이 때 Spring의 버전과 맞아야 오류가 나지 않는다는 것이다.

라이브러리의 버전을 확인하는 방법은 하나를 클릭해서 들어간 후 각 버전을 누른 뒤 밑에 compile dependencies에 나와있는 Spring 버전을 확인하는 것이다.

나는 Spring 버전이 4.3.9 이고 그에 맞는 Spring Security의 버전은 4.2.3 이었다.

이것을 복사해서 pom.xml에 아래처럼 붙여 넣어줬다.

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-core</artifactId>
	<version>4.2.3.RELEASE</version>
</dependency>
		
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
		
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>

2. spring-security.xml 생성

먼저, WEB-INF/spring 에 spring-security.xml을 추가해준다

<?xml version="1.0" encoding="UTF-8"?>
   <beans:beans xmlns="http://www.springframework.org/schema/security"
       	xmlns:beans="http://www.springframework.org/schema/beans"
       	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       	xsi:schemaLocation="http://www.springframework.org/schema/beans
       	http://www.springframework.org/schema/beans/spring-beans.xsd
       	http://www.springframework.org/schema/security
       	http://www.springframework.org/schema/security/spring-security.xsd">
       
	<beans:bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />  
 
</beans:beans>

그리고 위의 코드를 복사해서 spring-security.xml에 붙여 넣는다.

3. web.xml 변경

다음으로, web.xml의 root-context.xml이 써져 있는 자리 바로 밑에 아래처럼 spring-security.xml을 추가해준다.

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		/WEB-INF/spring/root-context.xml
		/WEB-INF/spring/spring-security.xml			
	</param-value>
</context-param>

4. @Autowired 설정


마지막으로, 사용하고자 하는 Controller에 @Autowired를 이용해 bcrypt를 추가해준다. 이제 bcrypt를 사용할 수 있다.
passEncoder.encode(암호화할 비밀번호) 를 사용하면 암호화 된 값이 나오고,
비교할 때는 if문을 사용하여 passEncoder.matches(입력받은 비밀번호, 암호화된 비밀번호) 로 비교해주면 된다!

profile
Backend Developer

0개의 댓글