package nlib.cmm.crypto; import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; import egovframework.rte.fdl.cryptography.impl.EgovARIACryptoServiceImpl; import nlib.cmm.service.NlibProperty; import nlib.util.StringUtil; /** *
* @Class Name : AriaCrypto.java * * @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용) * * * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021) * ** * @ ------------ -------- --------------------------- * @ 수정일 수정자 수정내용 * @ ------------ -------- --------------------------- * @ 2021. 7. 8. KNKIM 최초 생성 * * * @author 이씨플라자 * DIGITALSHIP KNKIM * @since 2021. 7. 8. * @version 1.0 * */ @Component("ariaCrypto") public class AriaCrypto { private static final Logger log = LoggerFactory.getLogger(AriaCrypto.class); /** * 암호처리 시, 기본 키 */ private static String ARIA_DEFAULT_KEY = NlibProperty.getProperty("crypto.aria.defaultKey"); /** * 기본키를 가지고 암호화한다. * * @param value * @return */ public static String encode(String value) { String ret = null; try { ret = AriaUtil.ariaEncrypt(value); } catch(Exception e) { log.error("ERROR at AriaCrypto.encode : " + e.toString()); e.printStackTrace(); ret = null; } return ret; } /** * 기본키를 가지고 Egov 모듈을 사용하여 암호화한다. * * @param value * @return */ public static String encodeEgov(String value) { log.info("encode : 암호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); return encodeEgov(value, ARIA_DEFAULT_KEY); } /** * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 Egov 모듈을 사용하여 암호화한다. * * @param value * @param key * @return */ public static String encodeEgov(String value, String key) { if(StringUtil.isEmpty(value)) { log.error("encode : 암호화할 문자열 정보가 없습니다."); return null; } if(StringUtil.isEmpty(key)) { log.error("encode : 암호화에 사용할 키 정보가 없습니다."); return null; } EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); String hashedPassword = egovPasswordEncoder.encryptPassword(key); egovPasswordEncoder.setHashedPassword(hashedPassword); egovPasswordEncoder.setAlgorithm("SHA-256"); EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); egovARIACryptoServiceImpl.setBlockSize(1025); return Base64.encodeBase64String(egovARIACryptoServiceImpl.encrypt(value.getBytes(), key)); } /** * 기본키를 가지고 복호화한다. * * @param value * @return */ public static String decode(String value) { String ret = null; try { ret = AriaUtil.ariaDecrypt(value); } catch(Exception e) { log.error("ERROR at AriaCrypto.decode : " + e.toString()); e.printStackTrace(); ret = null; } return ret; } /** * 기본키를 가지고 Egov 모듈을 사용하여 복호화한다. * * @param value * @return */ public static String decodeEgov(String value) { log.info("decode : 복호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); return decodeEgov(value, ARIA_DEFAULT_KEY); } /** * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 Egov 모듈을 사용하여 복호화한다. * @param value * @param key * @return */ public static String decodeEgov(String value, String key) { if(StringUtil.isEmpty(value)) { log.error("decode : 복호화할 암호문자열 정보가 없습니다."); return null; } if(StringUtil.isEmpty(key)) { log.error("decode : 복호화에 사용할 키 정보가 없습니다."); return null; } EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); String hashedPassword = egovPasswordEncoder.encryptPassword(key); egovPasswordEncoder.setHashedPassword(hashedPassword); egovPasswordEncoder.setAlgorithm("SHA-256"); EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); egovARIACryptoServiceImpl.setBlockSize(1025); return new String(egovARIACryptoServiceImpl.decrypt(Base64.decodeBase64(value), key)); } }