package nlib.cmm.crypto; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; 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); /** * 기본키를 가지고 암호화한다. * * @param value * @return * @throws InvalidKeyException */ public static String encode(String value){ String ret = null; try { ret = AriaUtil.ariaEncrypt(value); } catch(UnsupportedEncodingException | InvalidKeyException e) { log.error("ERROR at AriaCrypto.encode : " + e.toString()); ret = null; } return ret; } /** * 기본키를 가지고 Egov 모듈을 사용하여 암호화한다. * * @param value * @return */ public static String encodeEgov(String value) { return encodeEgov(value, NlibProperty.getProperty("crypto.aria.defaultKey")); } /** * 전달받은 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(UnsupportedEncodingException | InvalidKeyException e) { log.error("ERROR at AriaCrypto.decode : " + e.toString()); ret = null; } return ret; } /** * 기본키를 가지고 Egov 모듈을 사용하여 복호화한다. * * @param value * @return */ public static String decodeEgov(String value) { return decodeEgov(value, NlibProperty.getProperty("crypto.aria.defaultKey")); } /** * 전달받은 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)); } }