반응형
전자정부프레임워크 DB접속정보 암호화
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3.10:fdl:crypto
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키를 복사해둔다.
- 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 파일의 주석을 해제하고 실행한다.
- 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>
반응형
'개발 > egovframework' 카테고리의 다른 글
[전자정부프레임워크] Id Generation 시퀀스 관리 (0) | 2023.05.02 |
---|---|
[전자정부프레임워크] 스프링시큐리티 로그인 적용(2/2) (0) | 2023.03.31 |
[전자정부프레임워크] 스프링시큐리티 로그인 적용(1/2) (0) | 2023.03.30 |
[전자정부프레임워크] Spring quartz 스케줄러 사용법 (0) | 2023.03.30 |
[전자정부프레임워크] Spring profile (운영,개발 분리) (0) | 2023.03.22 |