study/Spring

5_Spring(암호화)

스파이크12 2020. 2. 27. 08:53

1. 비밀번호를 평문으로 저장하면 어떻게 될까?

 -> 범죄행위

2. SHA-512 해시함수를 이용한 암호화

 -> 단방향 해시 함수(복호화 불가능)

 문제점 : 같은 비밀번호는 암호화 내용(다이제스트)이 똑같다

 -> 다이제스트가 많이 모이면 원래 비밀번호를 

     검색을 통해 찾아낼 가능성이 있음(해킹에 취약)

 - 일반적인 장비로도 1초에 56억개의 다이제스트를 만들수 있음

3. bcrypt 해시 함수를 이용한 암호화(salting 기법)

 - 입력된 문자열을 암호화 할때 바로 해시함수에 대입하는 것이 아닌

   임의의 값(salt)을 문자열에 추가하여 암호화를 진행

   Spring Security 모듈에서 지원해줌

   -> pom.xml 라이브러리 추가

pom.xml

		<!-- Spring Security 모듈 추가 -->
		<!-- 
			 spring-security-core
			 spring-security-web
			 spring-security-config
		 -->
		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-core</artifactId>
		    <version>5.2.2.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>5.2.2.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>5.2.2.RELEASE</version>
		</dependency>

Java Resources/src/main/resources/spring 에 spring-security.xml 추가

<?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/security http://www.springframework.org/schema/security/spring-security-5.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 네임스페이스들어가서 시큐리티 체크 -->
	<!-- 스프링 보안과 관련된 설정을 추가하는 파일 -->	
	
	<!-- bcyprt 암호화 관련 bean 등록 -->
	<bean id="bcryptPasswordEncoder"
		  class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
		  
	<!-- 해당 xml파일을 읽을 수 있도록 
		web.xml에서 contextConfigLocation에 해당 xml 경로 추가
	-->
</beans>

네임스페이스들어가서 시큐리티체크

web.xml

-> ServiceImpl

상단에 

@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;

암호화

bCryptPasswordEncoder.encode(암호화할매개변수);

bCryptPasswordEncode.matches(암호화되지않은문자열,암호화된문자열);