Spring - 7. 암호화

Bloooooooooooooog..·2023년 4월 27일

Bcrypt

블로피시 기반의 암호화 방식이다. SHA-512 방식은 만약 같은 패스워드가 있다면 암호화 된 결과는 같게 된다. 즉 마음만 먹는다면 문자열을 조합해서 암호를 풀 가능성이 생긴다. Bcrypt는 내부에서 salt 과정을 거쳐서 암호화 때마다 결과값이 다르게 된다.

Spring Security

Bcrypt를 사용하기 위해서는 pom.xml에 spring security dependency를 추가해준다.

Maven Repository

		<!-- Spring-security 모듈 추가 -->
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-core</artifactId>
		    <version>5.7.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-web</artifactId>
		    <version>5.7.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-config</artifactId>
		    <version>5.7.1</version>
		</dependency>

Configuration file 생성

src/main/resources 폴더 안에 Spring Bean Configuration file을 생성해준다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:security="http://www.springframework.org/schema/security"
	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-5.7.xsd">
	
	<!-- Bcrypt 암호화용 bean 생성 -->
	<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
</beans>

내부에는 bcrypt사용을 위한 bean을 등록해준다.

Web.xml에 등록

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
		classpath:spring/root-context.xml
		classpath:spring/spring-security.xml
		</param-value>
	</context-param>

위와 같이 등록한 configuration bean file을 web.xml에 등록해준다. 위 과정을 거치지 않으면 사용이 불가능하다.

bcrypt 사용

	@Autowired
	private BCryptPasswordEncoder bcrypt;
    // 인스턴트를 생성해준다.
    
    // 암호화를 위해서는 encode() 메소드를 사용해주면 된다.
    
    /* parameter로 얻어온 회원의 비밀번호와 암호화된 DB상의
       비교한다고 가정했을 때
       
      	두 값이 같은지를 비교하기 위해서는 
        matches(암호화 전의 비밀번호, 암호화 후의 비밀번호)
        를 이용하면 된다.
    */
 	String dbPw = "sfekjlkgjzkgjgdrk@@fsslkle"; 
    // 암호화된 패스워드라고 가정
 
	@Override
	public int checkPw(String toChangePw, String memberPw) {
	
    	if(bcrypt.matches(memberPw, dbPw){ // 만약 회원이 입력한
        // memberPw와 db에 입력된 dbPw가 같다면
        	String changingPw = bcrypt.encode(toChangePw);
            // 새롭게 바꿀 pw를 암호화해준다.
        }

	}
profile
공부와 일상

0개의 댓글