itsm_ysm/src/main/java/nlib/cmm/crypto/AriaCrypto.java

173 lines
4.9 KiB
Java

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;
/**
* <pre>
* @Class Name : AriaCrypto.java
*
* @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용)
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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));
}
}