전자정부 프레임워크의 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에 등록하여 사용하는 방법 또한 가능합니다.
참고 : 전자정부 프레임워크 공식 문서
'프로그래밍 > Web.' 카테고리의 다른 글
[JavaScript] 자식 항목 선택시 부모 항목 이벤트 실행 방지 (2) | 2020.11.22 |
---|---|
[HTML] 이미지가 없으면 감추기 (0) | 2020.10.16 |
[Mybatis] 무제 (0) | 2020.09.29 |
[Web Security] 불필요한 HTTP Method 지원 방지 (0) | 2020.08.24 |
[Web] OWASP ZAP로 HTTP Method 확인하기 (0) | 2020.08.24 |
댓글