본문 바로가기
프로그래밍/Web.

[Egov] Crypto 간소화 서비스로 DB 접속정보 암호화 하기

by _Chavi 2021. 9. 3.

전자정부 프레임워크의 crypto 간소화 서비스를 이용하여 DB 접속 정보를 암호화해보겠습니다.

 

준비
<dependency>
    <groupId>egovframework.rte</groupId>
    <artifactId>egovframework.rte.fdl.crypto</artifactId>
    <version>${egovframework.rte.version}</version>
</dependency>

버전에 맞는 의존성 패키지를 준비합니다.

 

알고리즘 키 생성
//계정암호화키 키
public String algorithmKey = "writeYourKey";

//계정암호화 알고리즘(MD5, SHA-1, SHA-256)
public String algorithm = "SHA-256";

//계정암호화키 블럭사이즈
public int algorithmBlockSize = 1024;

public static void main(String[] args) {
	EgovEnvCryptoAlgorithmCreateTest cryptoTest = new EgovEnvCryptoAlgorithmCreateTest();

	EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder();
	egovPasswordEncoder.setAlgorithm(cryptoTest.algorithm);

	LOGGER.error("------------------------------------------------------");
	LOGGER.error("알고리즘(algorithm) : "+cryptoTest.algorithm);
	LOGGER.error("알고리즘 키(algorithmKey) : "+cryptoTest.algorithmKey);
	LOGGER.error("알고리즘 키 Hash(algorithmKeyHash) : "+egovPasswordEncoder.encryptPassword(cryptoTest.algorithmKey));
	LOGGER.error("알고리즘 블럭사이즈(algorithmBlockSize)  :"+cryptoTest.algorithmBlockSize);

}

사용하고자 하는 알고리즘과 암호화 키를 입력하여 아래의 결과를 얻습니다.

 

crypto 간소화 서비스 설정 등록(context-crypto.xml)
<egov-crypto:config id="egovCryptoConfig" 
	initial="true"
	crypto="true"
	algorithm="SHA-256"
	algorithmKey="writeYourKey"
	algorithmKeyHash="TKvNl2+ANRM0vgcAwtf7UWJ29m7O90E9Sos8wqfmKEw="
	cryptoBlockSize="1024"
/>

이전에 얻었던 값을 설정 파일에 등록합니다.

 

DB 정보 암호화
public static void main(String[] args) {

	String[] arrCryptoString = { 
		"dba",							//데이터베이스 접속 계정 설정
		"dba",							//데이터베이스 접속 패드워드 설정
		"jdbc:CUBRID:127.0.0.1:30000:test:::?charSet=utf-8",	//데이터베이스 접속 주소 설정
		"cubrid.jdbc.driver.CUBRIDDriver"			//데이터베이스 드라이버
	};

	LOGGER.error("------------------------------------------------------");		
	ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:/context-crypto_test.xml"});
	EgovEnvCryptoService cryptoService = context.getBean(EgovEnvCryptoServiceImpl.class);
	LOGGER.error("------------------------------------------------------");

	String label = "";
	try {
		for(int i=0; i < arrCryptoString.length; i++) {		
			if(i==0)label = "사용자 아이디";
			if(i==1)label = "사용자 비밀번호";
			if(i==2)label = "접속 주소";
			if(i==3)label = "데이터 베이스 드라이버";
			LOGGER.error(label+" 원본(orignal):" + arrCryptoString[i]);
			LOGGER.error(label+" 인코딩(encrypted):" + cryptoService.encrypt(arrCryptoString[i]));
			LOGGER.error("------------------------------------------------------");
		}
	} catch (IllegalArgumentException e) {
		LOGGER.error("["+e.getClass()+"] IllegalArgumentException : " + e.getMessage());
	} catch (Exception e) {
		LOGGER.error("["+e.getClass()+"] Exception : " + e.getMessage());
	} finally {
		((ClassPathXmlApplicationContext)context).close();
	}

}

위의 소스를 통해 아래의 결과를 얻습니다.

 

적용 및 복호화
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="#{egovEnvCryptoService.decrypt('fl3u2HBoADzZSZOi8nbODuKj9p5tPjxGO8ztBOukkUY%3D')}"/>
	<property name="url" value="#{egovEnvCryptoService.decrypt('XR5zJXbCEWK3Q3WjXzUNp8iJI4wfRPIMMPG9ETNbHNmS1KoLEiNTQCiFNQX4gyqydS9lc1eaLZX7QNrB0mJuIg%3D%3D')}" />
	<property name="username" value="#{egovEnvCryptoService.decrypt('YNsi0%2B99ktZbaZA9ygx6ZA%3D%3D')}" />
	<property name="password" value="#{egovEnvCryptoService.decrypt('YNsi0%2B99ktZbaZA9ygx6ZA%3D%3D')}" />
</bean>

위와 같이 복호화하여 사용하며, properties에 등록하여 사용하는 방법 또한 가능합니다.

 

참고 : 전자정부 프레임워크 공식 문서

댓글