본문 바로가기
개발/egovframework

[전자정부프레임워크] DB접속정보 암호화 - crypto 서비스

by 아크투어 2023. 5. 3.
반응형

전자정부프레임워크 DB접속정보 암호화

 

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3.10:fdl:crypto 

 

egovframework:rte3.10:fdl:crypto [eGovFrame]

표준프레임워크 3.8 부터 ARIA 블록암호 알고리즘 기반 암/복호화 설정을 간소화 할 수 있는 방법을 제공한다. 내부적으로 필요한 설정을 가지고 있고, XML Schema를 통해 필요한 설정만을 추가할 수

www.egovframe.go.kr

 

1.pom.xml

  • 표준프레임워크 3.8 부터 ARIA 블록암호 알고리즘 기반 암/복호화 설정을 간소화 할 수 있는 방법을 제공한다.
  • 아래와 같이 pom.xml을 확인한다.
<dependency>
    <groupId>egovframework.rte</groupId>
    <artifactId>egovframework.rte.fdl.crypto</artifactId>
    <version>${egovframework.rte.version}</version>
</dependency>

 

 

2. context-crypto-test.xml 생성

  • 해당파일은 보통 resources > spring의 하위 경로에 위치시킨다. 해당파일을 제대로 인식하지 못한다면 context-datasource.xml 파일과 동일한 경로에 위치시킨다.
  • 실제로 실행시 message 관련 에러가 발생한다. 로직은 이상없으나 message를 제대로 출력을 못해서 발생하는 에러이니 아래 주석을 해제하고 실행하면 된다. classpath 경로만 본인것으로 맞춘다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:egov-crypto="http://maven.egovframe.go.kr/schema/egov-crypto"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://maven.egovframe.go.kr/schema/egov-crypto http://maven.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.10.0.xsd">
 	
 	<!-- 실행시 주석해제
 	<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="useCodeAsDefaultMessage">
			<value>true</value>
		</property>
		<property name="basenames">
			<list>
				<value>classpath:/egovframework/properties/globals</value>
			</list>
		</property>
	</bean>-->
	 
    <egov-crypto:config id="sctCryptoConfig" 
    	initial="true"
    	crypto="true"
    	algorithm="SHA-256"
    	algorithmKey="bbs"
    	algorithmKeyHash="l1Z/hjn9KzmxiYYd0S1W6ehzLUxe24Kzw0wsM2P8riY="
		cryptoBlockSize="1024"
		cryptoPropertyLocation="classpath:/egovframework/properties/globals.properties"
	/>
 
</beans>

 

 

3. EgovEnvCryptoAlgorithmCreateTest.java

  • 알고리즘 키값은 본인이 사용할것으로 대체한다.
  • 암호화 알고리즘은 대중적인 SHA-256으로 한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;

public class EgovEnvCryptoAlgorithmCreateTest {

	private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoAlgorithmCreateTest.class);

	//계정암호화키
	public String algorithmKey = "bbs";

	//계정암호화 알고리즘(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.info("------------------------------------------------------");
		LOGGER.info("알고리즘(algorithm) : " + cryptoTest.algorithm);
		LOGGER.info("알고리즘 키(algorithmKey) : " + cryptoTest.algorithmKey);
		LOGGER.info("알고리즘 키 Hash(algorithmKeyHash) : " + egovPasswordEncoder.encryptPassword(cryptoTest.algorithmKey));
		LOGGER.info("알고리즘 블럭사이즈(algorithmBlockSize)  :" + cryptoTest.algorithmBlockSize);

	}
}

 

 

4. EgovEnvCryptoUserTest.java

  • 해당페이지에서는 두가지만 주의하면된다. arrCryptoString 부분에는 접속정보를 입력하면된다. 암호화 하고 싶은 부분만 넣으면되고 4개항목 모두 할필요는 없다.
  • context-crypto-test.xml 파일경로를 잘 확인한다.
package spaceport.com.cmm.crypto;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import egovframework.rte.fdl.cryptography.EgovEnvCryptoService;
import egovframework.rte.fdl.cryptography.impl.EgovEnvCryptoServiceImpl;

public class EgovEnvCryptoUserTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoUserTest.class);
	
    @SuppressWarnings("resource")
    public static void main(String[] args) {
		
        //해당부분 작성해야한다.
        String[] arrCryptoString = {
            "userId", // 데이터베이스 접속 계정 설정
            "userPassword", // 데이터베이스 접속 패드워드 설정
            "url", // 데이터베이스 접속 주소 설정
            "databaseDriver" // 데이터베이스 드라이버
        };

        LOGGER.info("------------------------------------------------------");
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "classpath:/egovframework/spring/com/context-crypto-test.xml" });
        EgovEnvCryptoService cryptoService = context.getBean(EgovEnvCryptoServiceImpl.class);
        LOGGER.info("------------------------------------------------------");

        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.info(label + " 원본(orignal):" + arrCryptoString[i]);
                LOGGER.info(label + " 인코딩(encrypted):" + cryptoService.encrypt(arrCryptoString[i]));
                LOGGER.info(label + " 디코딩(encrypted):" + cryptoService.decrypt(arrCryptoString[i]));
                LOGGER.info("------------------------------------------------------");
            }
        } catch (IllegalArgumentException e) {
            LOGGER.error("[" + e.getClass() + "] IllegalArgumentException : " + e.getMessage());
        } catch (Exception e) {
            LOGGER.error("[" + e.getClass() + "] Exception : " + e.getMessage());
        }
    }
}

 

 

5. 실행테스트 

  • EgovEnvCryptoAlgorithmCreateTest.java
  • 알고리즘 Hash키를 복사해둔다.

EgovEnvCryptoAlgorithmCreateTest 실행
EgovEnvCryptoAlgorithmCreateTest 실행

 

  • context-crypto-test.xml
  • 아래와 같이 본인정보에 맞게 작성한다.
<egov-crypto:config id="sctCryptoConfig" 
    initial="true"
    crypto="true"
    algorithm="SHA-256"
    algorithmKey="bbs"
    algorithmKeyHash="eBdkho+pq7Pn22FYOrWjqG+/Q5JhrQcrMFTfacY1jsk="
    cryptoBlockSize="1024"
    cryptoPropertyLocation="classpath:/egvoframework/properties/globals.properties"
/>

 

  • EgovEnvCryptoUserTest.java
  • 해당부분을 아래와 같이 작성했다면
  • 해당파일 실행시 오류가 난다면 context-crypto-test.xml 파일의 주석을 해제하고 실행한다.

egovframework 접속정보 암호화 예시
egovframework 접속정보 암호화 예시

 

egovframework crypto 실행
egovframework crypto 실행

 

  • globals.properties 작성
  • 위 암호화 처리된 정보를 작성한다.
Globals.postgres.DriverClassName=...
Globals.postgres.Url=...
Globals.postgres.UserName=...
Globals.postgres.Password=...

 

  • context-datasource.xml
  • 암호화 코드일경우 :   #{egovEnvCryptoService.getPassword()} 
  • 평문일경우 : ${Globals.postgres.Password}
<beans profile="postgres">  
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${Globals.postgres.DriverClassName}"/>
        <property name="url" value="${Globals.postgres.Url}" />
        <property name="username" value="${Globals.postgres.UserName}"/>
        <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
    </bean>
</beans>

 

반응형