Servlet - 암호화

2025. 2. 19. 17:43·Web

encry.java (servlet)

package web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//Controller
public class encry extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String passwd = "940";
		//해당 문자를 base64를 이용하여 encode(암호화) 
		encry_model em = new encry_model();	//암호화 model 클래스 로드 
		String result = em.dataencode(passwd);	//해당 메소드에 문자값을 전달 
		System.out.println(result);	//최종 암호화된 사항을 출력 
		
		//base64로 변환된 문자를 decode(복호화) 이용하여 원본 문자로 변환 
		String repasswd = "OTQw";
		String result2 = em.datadecode(repasswd);
		System.out.println(result2);
		//=> base64요즘 잘 안쓰임 get으로 보낼때나 이메일에 사용  
		
		//md5 암호화 알고리즘 
		String result3 = em.md5_encode(passwd);
		System.out.println(result3);
		//md5는 복호화가 불가능 바로 DB에 저장 
		//사실 해커가 마음먹으면 가능 그래도 base64보다 안전
		
		String result4 = em.sha_encode2(passwd);
		System.out.println(result4);
		
	}
}

 

encry_model.java

package web;

import java.security.MessageDigest;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;

//문자를 암호화하는 모델  
public class encry_model {
	public String dataencode(String word) {	//base64 암호화 
		Encoder ec = Base64.getEncoder();
		String security = ec.encodeToString(word.getBytes());	//encodeToString(바이트) => 스트링 
		
		return security;
	}
	public String datadecode(String word) {	//base64 복호화 
		Decoder dc = Base64.getDecoder();
		/*
		byte dec[] = dc.decode(word);
		String security = new String(dec);
		 */
		byte dec[] = dc.decode(word);
		String security = new String(dc.decode(word));
		return security;
	}
	
	/*MD5 : %02x 기본 == %x, %01
	 * 		%03x 부터 변함 
	 * 		x : 소문자 X : 대문자 	
	*/		
	public String md5_encode(String word) {
		String security = "";
		try {
			//MessageDigest : 암호화 클래스 구성 형태를 가지고있는 라이브러리 
			MessageDigest md = MessageDigest.getInstance("md5");
			md.update(word.getBytes());	//해당 암호화 기준으로 byte로 문자를 변환 
			byte md5byte[] = md.digest();	//byte 원시배열에 해당 암호화된 byte들을 저장 
			
			StringBuilder sb = new StringBuilder();	//문자열 클래스로 연속저장 
			for(byte s : md5byte) {	//for each를 이용하여 연속 저장 
				sb.append(String.format("%02x", s));	
				//%02x : 2자리 문자 => 1234의 경우 01, 02, 03, 04
				//%01x : 1자리 문자 => 1234의 경우 1, 2, 3, 4
				//%05x : 5자리 문자 => 00001, 00002, 00003, 00004
			}
			security = String.valueOf(sb);
		}catch (Exception e) {
			security = "md5 Error!";
		}
		return security;
	}

	/*
	 * 블록체인 기술 사용
	 * sha-1 : 16진수 40자로 생성되는 암호화 기술 
	 *			%01x, %02x, %03x 모두 다름  
	 * sha-2 : sha-224, sha-256, sha-384, sha-512 
	 * sha-3 : sha3-224, sha3-256, sha3-384, sha3-512	//높은 jdk 버전 필요 요즘 많이 사용
	 */
	public String sha_encode2(String word) {
		String security = "";
		try {
			/* getInstance("sha-1")
			 * "sha-224"
			 * "sha-516"
			 */
			MessageDigest sha = MessageDigest.getInstance("sha-1");
			sha.update(word.getBytes());	
			byte shabyte[] = sha.digest();	 
			
			StringBuilder sb = new StringBuilder();	
			for(byte s : shabyte) {	 
				sb.append(String.format("%02x", s));	
			}
			security = String.valueOf(sb);
		}catch (Exception e) {
			security = "sha Error!";
		}
		return security;
	}
	
	//복합 암호화 기술 => base64 + md5
	//복합 암호화 기술 => md5 + sha-2 => 하나뚫는데 22시간 걸림 
	
}

 

임포트 주의 : Java.util.Base64

 

저작자표시 비영리 변경금지 (새창열림)
'Web' 카테고리의 다른 글
  • Servlet - 모바일
  • Servlet - 기초4
  • Servlet - 응용문제 [회원 가입]
  • Servlet - 기초2
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      net2
      Oracle
      noticewriteok
      net4
      net1
      net3
      spring-boot
      re_java10
      macbook pro m4
      exam1_1~10
      java_io1~10
      file25
      io_dto
      notice_writer
      ab1
      re2
      file25_t
      datalist
      file24
      net5~10
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Servlet - 암호화
    상단으로

    티스토리툴바