[Spring Boot] Spring security / Rich Text Editor

KDH59·2024년 5월 28일
0

[SPRING BOOT]

목록 보기
6/7

Spring security 암호화

  • Spring Security 는 입력 값을 SHA-256 알고리즘을 사용하는 해시 함수를 이용하여 암호화 시켜 준다.
  • input 값을 넣으면 어떤 계산에 의해 output 을 반환하는 것이 해시 함수(Hash Function) 이다.
  • 이때 output 은 해시(Hash) 이라고 한다.
  • Hash 는 output 을 통해서 input 을 추론할 수 없다. 이것을 우리는 “비 가역 적” 이라고 한다.

암호화 사용 하기 위한 설정

Security 라이브러리 추가

암호화 부분 빈 등록

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    □ 암호화 부분 빈 등록
    @Bean
    public PasswordEncoder getPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
    
    

암호화 외 기능 비활성화

□ 스프링 시큐리트에는 로그인 기능등 많은 기능들이 있지만
□ 우리는 암호화만 사용할 것 이므로, 기본적인 다른 기능들은 모두 비활성화(disable) 한다.
@Bean
public SecurityFilterChain filteChain(HttpSecurity http) throws Exception {
	http.httpBasic().disable();
	return http.build();
	
}

평문(plain text) 과 암호문 (encode text)

@RestController
public class EncoderController {

Logger logger = LoggerFactory.getLogger(getClass());
□ 아까 등록 한 빈 사용
@Autowired PasswordEncoder encoder;

private String hash ="";

@GetMapping(value="/encode/{msg}")
public Map<String, String> encode(@PathVariable String msg){
	logger.info("평문(plain text) - "+msg);
	□ encoder.encode(msg)를 사용하는 이유는 메시지를 해싱하여 보안성을 높이고, 메시지를 일관된 형식으로 표현하기 위함
    hash = encoder.encode(msg);
	logger.info("암호문(encode text) - "+hash);
	
	
	□ 같은 평문을 넣어도 암호문은 그때 그때 달라진다
	□ 암호화 시 sault 라는 값을 넣어서 암호화 하기 때문이다.
	□ 그래서 평문을 암호화 하여 기존 암호화 문구와 비교하는 방식으로 암호문을 풀어낼 수 없다.
	Map<String, String> map = new HashMap<String, String>();
	map.put("plain", msg);
	map.put("encoded", hash);
	return map;
}

평문과 암호문 일치 여부 확인

□ encoder.matches(평문값,암호문값)를 사용하여 파악

@GetMapping(value="/decode/{msg}")
public Map<String, Boolean> decode(@PathVariable String msg){
	
	logger.info("평문(plain) = "+msg);
    
    □ encoder.matches(평문값,암호문값)를 사용하여 파악
	boolean seccess = encoder.matches(msg, hash);
	logger.info("일치 여부 확인 : "+seccess);
	Map<String, Boolean> map = new HashMap<String, Boolean>();
	map.put("match", seccess);
	return null;
}

□ 결과값

[36mkr.co.gudi.controller.EncoderController  : 평문(plain) = pass1
EncoderController  : 일치 여부 확인 : falsa
EncoderController  : 평문(plain) = pass
EncoderController  : 일치 여부 확인 : true

암호화 된 회원 가입과 로그인 구현

Rich Text Editor

파일업로드 / 텍스트 pdf로 변환&저장 / 출력해주는 기능

에디터 다운 https://richtexteditor.com/

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
   <link rel="stylesheet" href="res/style.css" />
   <link rel="stylesheet" href="richtexteditor/rte_theme_default.css" />
   <script type="text/javascript" src="richtexteditor/rte.js"></script>
   <script type="text/javascript" src='richtexteditor/plugins/all_plugins.js'></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

□ link rel 태그에서 필요한 파일 확인 후 res 파일 / richtexteditor 파일 추가

□ src="data:image/png;base64 ▼

※ 드래그해서 이미지 첨부 방식 ▼
□ data:image 방식 : 이미지를 ba64 인코딩하여 문자열화 하는 방식

  • 장점 : 서버에서의 별도 파일 처리가 필요 없다. ( 이미지의 출처를 확인하기도 어렵다. )
  • 단점 : 용량제어가 어렵다.(정확한 이미지 파일 크기를 알기 어려움) / 기존 파일 보다 용량을 더 많이 차지 한다.
profile
[JAVA]

0개의 댓글