일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SVN
- 전자정부표준프레임워크
- 전자정부 표준프레임워크
- Sring Functions and Operators
- String Function and Operators
- 윈도우
- HTTP
- Data and Time Functions
- 티베로
- Oracle
- Date and Time Functions
- Tibero
- String Functions and Date Operators
- String Functions and Operators
- 방화벽
- Date and Time Function
- 오라클
- MySQL
- Today
- Total
웹이야기
globals.properties 의 정보에 대한 암호문 생성 본문
globals.properties 에 있는 중요정보에 대해서 암호문을 생성할 수 있는 방법을 생각해보자.
전자정부 표준프레임워크 3.8 부터 지원하는 기능인 것 같다.
전자정부 표준프레임워크 3.9 를 다운받아보니 기본설정으로 암호화하는 것으로 되어 있고, 3.8은 그렇지 않았다.
위키문서에 그 내용이 기술되어 있는데, 이 블로그 글은 그 내용을 길게 늘여뜨린 것에 불과하다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:crypto_simplify_v3_8
설정정보중에 오라클 접속정보 중에 비밀번호를 암호화한다고 해보자
오라클 연결정보중에 아이디 // 비밀번호는 다음과 같다.
아이디 : test
비밀번호 : test1234
뭔지 잘은 모르지만
algorithmKey : egovframe
algorithm : SHA-256
algorithmBlockSize : 1024
라고 정의를 하고 시작해보자.
algorithmKey 는 다른 걸 입력해도 무방하지만 여기서는 편의상 egovframe 이라고 한다.
그러면 이 글에서는 오라클 비밀번호인 test1234 에 대한 암호문을 만드는 것을 목표로 한다. 그것을 적용하는 것은 다음 글에서 기술한다.
암호문을 만들기 위해서는 먼저 알고리즘 키 Hash(algorithmKeyHash) 값을 구해야 하는 것 같다.
아래 1번에서 4번까지의 절차에 해당한다.
1. EgovEnvCryptoAlgorithmCreateTest.java 파일 생성
- 현재 테스트 하기 위해 셋팅된 이클립스는 전자정부 표준프레임워크 3.9 를 기반으로 한다.
즉 전자정부 표준프레임워크 3.9 가 셋팅이 되어 있다는 얘기다.
위 URL에 있는 코드를 그대로 복사해서 java 파일을 하나 생성한다.
이름을 EgovEnvCryptoAlgorithmCreateTest.java 라고 하였다.
* java 파일의 생성 위치를 ...\src\main\java 바로 밑에 두었다. 그렇지 않은 경우 패키징 관련 오류가 발생한다.
- 소스의 내용은 아래와 같다. 소스의 카피는 위키 URL에서 하는 것이 좋다.
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 = "(사용자정의 값)";
//계정암호화 알고리즘(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);
}
}
- 위키 URL에서 아래영역에 해당한다.
2. 1번에서 생성한 EgovEnvCryptoAlgorithmCreateTest.java 소스를 수정.
1) algorithmKey 수정
public String algorithmKey = "(사용자정의 값)";
부분을 아래와 같이 수정한다.
public String algorithmKey = "egovframe";
시작 전에 정의한 algorithmKey 의 값이다. 임의의 값을 넣을 수 있다.
2) algorithm 확인, SHA-256으로 되어 있는 것 확인
//계정암호화 알고리즘(MD5, SHA-1, SHA-256)
public String algorithm = "SHA-256";
3) algorithmBlockSize 확인, 1024로 되어 있는 것 확인
//계정암호화키 블럭사이즈
public int algorithmBlockSize = 1024;
3. EgovEnvCryptoAlgorithmCreateTest.java 를 실행.
- EgovEnvCryptoAlgorithmCreateTest.java 파일을 선택하고 오른쪽 마우스 버튼을 클릭 > Run As > 2. Java Application 을 선택한다.
- 그랬더니 뭐가 나올줄 알았는데. 오른쪽 Console 창에 아무것도 나오지 않는다.
- 다시 소스를 조금 수정한다.
LOGGER.info 를 LOGGER.error 로 변경한다.
logger 의 level이 디폴트로 error 로 설정되어 있는 것 같다. logger 의 level을 수정해도 되지만 여기서는 편의상 소스를 수정했다. 수정하지 않아도 잘 나오는 경우에는 무시하고 넘어간다. 잘 나오는 경우에는 4번으로 이동한다.
- 다시 실행을 해준다.
- 그랬더니 아래와 같은 결과가 Console 창에 찍힌다.
2020-03-11 14:51:21,118 ERROR [EgovEnvCryptoAlgorithmCreateTest] ------------------------------------------------------
2020-03-11 14:51:21,131 ERROR [EgovEnvCryptoAlgorithmCreateTest] 알고리즘(algorithm) : SHA-256
2020-03-11 14:51:21,131 ERROR [EgovEnvCryptoAlgorithmCreateTest] 알고리즘 키(algorithmKey) : egovframe
2020-03-11 14:51:21,163 ERROR [EgovEnvCryptoAlgorithmCreateTest] 알고리즘 키 Hash(algorithmKeyHash) : gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ=
2020-03-11 14:51:21,163 ERROR [EgovEnvCryptoAlgorithmCreateTest] 알고리즘 블럭사이즈(algorithmBlockSize) :1024
4. 알고리즘 키 Hash(algorithmKeyHash) 값을 기록해둔다.
- Console 창에 찍힌 것 중에 알고리즘 키 Hash(algorithmKeyHash) 값을 기록해둔다.
알고리즘 키 Hash(algorithmKeyHash) : gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ=
이제는 암호문을 만들기 위한 과정을 진행한다.(오라클 비밀번호인 test1234 에 대한 암호문을 만드는 것을 하고 있음을 잊지 않아야 한다. )
5. context-crypto-test.xml 이라는 파일을 만들어준다.
- 이 파일을 어디에 위치시켜야 하는지 몰라서... context-crypto.xml 파일이 있길래 그 옆에다가 위치를 시켰다.
그러고 보니 경로가 대략적으로
C:\eGovFrameDev-3.9.0-64bit\workspace\egov\src\main\resources\egovframework\spring\com\ 이 하위가 되었다.
아래 소스를 이용해서 파일을 생성한다.(소스 복사는 위키 URL에 있는 것으로 한다.)
<?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://www.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://www.egovframe.go.kr/schema/egov-crypto http://www.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.8.xsd">
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage">
<value>true</value>
</property>
<property name="basenames">
<list>
<value>classpath:/egovframework/egovProps/globals</value>
</list>
</property>
</bean>
<egov-crypto:config id="egovCryptoConfig"
initial="false"
crypto="true"
algorithm="SHA-256"
algorithmKey="(사용자정의 값)"
algorithmKeyHash="(생성값)"
cryptoBlockSize="1024"
/>
</beans>
- 위키 URL에서 아래 이미지의 영역이다.
- 소스를 수정한다.
algorithmKey="(사용자정의 값)"
algorithmKeyHash="(생성값)"
부분을
algorithmKey="egovframe"
algorithmKeyHash="gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ="
와 같이 값이 수정해준다.
6. EgovEnvCryptoUserTest.java 파일을 생성한다.
* java 파일의 생성 위치를 ...\src\main\java 바로 밑에 두었다. 그렇지 않은 경우 패키징 관련 오류가 발생한다.
// 데이터베이스 연결 항목(Url, UserName, Password) 인코딩 값 생성 JAVA
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);
public static void main(String[] args) {
String[] arrCryptoString = {
"userId", //데이터베이스 접속 계정 설정
"userPassword", //데이터베이스 접속 패드워드 설정
"url", //데이터베이스 접속 주소 설정
"databaseDriver" //데이터베이스 드라이버
};
LOGGER.info("------------------------------------------------------");
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:/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("------------------------------------------------------");
}
} catch (IllegalArgumentException e) {
LOGGER.error("["+e.getClass()+"] IllegalArgumentException : " + e.getMessage());
} catch (Exception e) {
LOGGER.error("["+e.getClass()+"] Exception : " + e.getMessage());
}
}
}
- 위키 URL 에서 소스는 카피한다.
- 소스를 수정한다.
- 위에서 처럼 LOGGER.info 를 LOGGER.error 로 수정한다. LOGGER.info로 잘 나온다면 수정하지 않아도 된다.
- classpath:/context-crypto-test.xml 부분도 수정해준다. context-crypto-test.xml 파일의 경로를 지정해주는 것인데 위에서 생성할 때 src\main\resources\egovframework\spring\com\ 이곳에 했으므로
classpath:/context-crypto-test.xml 를
classpath:/egovframework/spring/com/context-crypto-test.xml 로 수정한다.
7. EgovEnvCryptoUserTest.java를 실행한다.
- 이 파일을 실행하여 암호화된 값을 얻을 수 있다.
- 파일을 선택하고 오른쪽 마우스버튼 > Run As > 2 Java Application 을 선택한다.
- Console 창에 아래와 같은 값들이 찍혔다.
2020-03-11 16:12:34,356 ERROR [EgovEnvCryptoUserTest] ------------------------------------------------------
2020-03-11 16:12:34,356 ERROR [EgovEnvCryptoUserTest] 사용자 아이디 원본(orignal):userId
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 사용자 아이디 인코딩(encrypted):%2Bn5a7BD6CPuNjHSUL9AK8w%3D%3D
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] ------------------------------------------------------
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 사용자 비밀번호 원본(orignal):userPassword
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 사용자 비밀번호 인코딩(encrypted):Mqbtimqz%2BzalgOo7W5w6gA%3D%3D
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] ------------------------------------------------------
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 접속 주소 원본(orignal):url
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 접속 주소 인코딩(encrypted):BqvAX86xPPqGQEFCB4aaKw%3D%3D
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] ------------------------------------------------------
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 데이터 베이스 드라이버 원본(orignal):databaseDriver
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] 데이터 베이스 드라이버 인코딩(encrypted):E4GtXk4i9yK0zjbiKDt5%2Fw%3D%3D
2020-03-11 16:12:34,402 ERROR [EgovEnvCryptoUserTest] ------------------------------------------------------
- userPassword 대신에 test1234 라는 값을 넣어서 찍어보면 test1234에 대한 암호화 된 값을 얻을 수 있다.
사용자 비밀번호 원본(orignal):test1234
사용자 비밀번호 인코딩(encrypted):CWXsMtjygK9T3I8EcvnxwA%3D%3D
라고 나온다.
- 비밀번호 뿐만 아니라 다른 값들도 암호화된 값을 얻을 수 있다.
이렇게 해서 암호화된 값을 얻었다. 이제는 이것을 프로젝트에 적용시켜보자.
위 내용을 적용시키는 것은 아래 글에서 기술하였다.
Done.
'전자정부표준프레임워크' 카테고리의 다른 글
전자정부 표준프레임워크 MySQL 연결 (0) | 2020.03.12 |
---|---|
globals.properties 의 정보에 대한 암호문 적용 (0) | 2020.03.11 |
설정파일의 중요 정보 암호화/복호화(globals.properties) (0) | 2020.03.11 |
전자정부 표준프레임워크 3.9 all-in-one 처음 셋팅해보기 -3(템플릿) (11) | 2020.03.10 |
전자정부 표준프레임워크 3.9 all-in-one 처음 셋팅해보기 -2( 이클립스 준비) (0) | 2020.03.10 |