1. backend 프로젝트에 aes256 class파일 추가
package com.common;

import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AES256 {

    public static String alg = "AES/CBC/PKCS5Padding";
    private final String key = "01234567890123456789012345678901";
    private final String iv = key.substring(0, 16); // 16byte
    
    
    public String encrypt(String text) throws Exception {
        Cipher cipher = Cipher.getInstance(alg);
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
        IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParamSpec);

        byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encrypted);
    }
    
    public String decrypt(String cipherText) throws Exception {
        Cipher cipher = Cipher.getInstance(alg);
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
        IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParamSpec);

        byte[] decodedBytes = Base64.getDecoder().decode(cipherText);
        byte[] decrypted = cipher.doFinal(decodedBytes);
        return new String(decrypted, "UTF-8");
    }
}

2. service 파일에 암호화 / 복호화 구문 추가

>>> 암호화(SHA256은 복호화할 필요없는 데이터에 적용, AES256은 복호화할 데이터에 적용)

// 사용자 등록 처리
	@Override
	public int userReg(UserVO user) throws Exception {
		log.info("reguser   :   {}", user);
		SHA256 sha256 = new SHA256();
		AES256 aes256 = new AES256();
		user.setUserPw(sha256.encrypt(user.getUserPw()));
		user.setUserPhone(aes256.encrypt(user.getUserPhone()));
		return userMapper.userReg(user);
	}

>>> 복호화

// 사용자 정보 페이지 조회
	@Override
	public List<UserVO> getUserInfo(String userId) throws Exception {
		AES256 aes256 = new AES256();
		List<UserVO> info =  userMapper.getUserInfo(userId);
		for(int i = 0 ; i<info.size() ; i++){
			info.get(i).setUserPhone(aes256.decrypt(info.get(i).getUserPhone()));
		}
		return info;
	}

>>> 이후 결과확인!!

>>> controller, service, mapper 파일에 경고가 출력될 경우 경고 코드를 읽고 알맞은 exception 추가하여 해결

 
 

'JAVA' 카테고리의 다른 글

데이터 암호화(SHA256)  (0) 2023.05.16
el, jstl  (0) 2023.05.15
Java-Jsp Driver로딩 및 DTO Bean  (0) 2023.05.15
Jsp-Java JDBC 연결  (0) 2023.05.09
매서드(method), 상속, final  (0) 2023.04.17

+ Recent posts