본문으로 바로가기

자바 SEED 암호화 예제

category 보안 2017. 8. 23. 00:03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



KISA에서 제공하는 Seed 암호화 알고리즘 예제


사용가이드 및 암호화에 필요한 .java파일을 다운받을 수 있는 링크를 아래에 첨부하였습니다.

http://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceDetail.do?bbsId=BBSMSTR_000000000002&nttId=77&pageIndex=1&searchCnd=&searchWrd=



오늘 Seed 암호화를 포스팅하게 된건.. DB에 고객정보를 insert할 때 Seed를 이용해서 암복호화를 진행하기로 했기 때문에.. 이왕 공부를 한 김에 글을 짧게 올렸습니다. 먼저 위의 URL에서 필요한 KISA_SEED_ECB_CBC_CTR.zip 을 다운 받습니다.

Seed암호화 운영방식에는 ECB, CBC, CTR 세 가지가 있는데 저는 CBC방식으로 한 예제를 첨부하겠습니다.


zip파일 안에는 c, c++, java, asp, jsp, php언어로 seed암호화를 사용할 수 있는 소스가 첨부되어 있습니다.


3가지 운영방식에서 CBC방식을 클릭


KISA_SEED_CBC.java 파일을 프로젝트에 추가합니다.


암/복호화 함수 설명


암호화 SEED_CBC_Encrypt

 

복호화 SEED_CBC_Descrypt

 


 input

 description 

 pbszUserKey

 사용자가 지정하는 입력 키(16bytes), 암호화 대칭키

 pbszIV 

 사용자가 지정하는 초기화 벡터(16bytes), CBC 대칭키

 message

 사용자 입력 평문 암호화할 문자열 byte 

 message_offset

 사용자 입력 길이 시작 오프셋(일단 0으로 넣으세요)

 message_length 사용자 입력 길이, 암호화할 문자열 byte 의 길이


**암복호화 함수의 파라미터는 동일합니다.

       

암호화 반환 값  :

return 사용자 입력에 대한 암호문 출력 byte배열


복호화 반환 값 : 

return 사용자 입력에 대한 평문 출력 

  1. package com.javalec.security.seed;
  2.  
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.Base64;
  5. import java.util.Base64.Decoder;
  6. import java.util.Base64.Encoder;
  7.  
  8. public class Main {
  9.     static String charset = "utf-8";
  10.     
  11.     public static byte pbUserKey[] = { (byte) 0x2c, (byte) 0x11, (byte) 0x19, (byte) 0x1d, (byte) 0x1f, (byte) 0x16, (byte) 0x12,
  12.             (byte) 0x12, (byte) 0x11, (byte) 0x19, (byte) 0x1d, (byte) 0x1f, (byte) 0x10, (byte) 0x14, (byte) 0x1b,
  13.             (byte) 0x16 };
  14.  
  15.     public static byte bszIV[] = { (byte) 0x27, (byte) 0x28, (byte) 0x27, (byte) 0x6d, (byte) 0x2d, (byte) 0xd5, (byte) 0x4e,
  16.             (byte) 0x29, (byte) 0x2c, (byte) 0x56, (byte) 0xf4, (byte) 0x2a, (byte) 0x65, (byte) 0x2a, (byte) 0xae,
  17.             (byte) 0x08 };
  18.    
  19.     public static void main(String[] args) {
  20.         // TODO Auto-generated method stub
  21.         byte[] encryptData = encrypt("ktko");
  22.         decrypt(encryptData);
  23.     }
  24.  
  25.     public static byte[] encrypt(String str) {
  26.         byte[] enc = null;
  27.  
  28.         try {
  29.             //암호화 함수 호출
  30.             enc = KISA_SEED_CBC.SEED_CBC_Encrypt(pbUserKey, bszIV, str.getBytes(charset)0,
  31.                     str.getBytes(charset).length);
  32.         } catch (UnsupportedEncodingException e) {
  33.             e.printStackTrace();
  34.         }
  35.  
  36.         Encoder encoder = Base64.getEncoder();
  37.         byte[] encArray = encoder.encode(enc);
  38.         try {
  39.             System.out.println(new String(encArray, "utf-8"));
  40.         } catch (UnsupportedEncodingException e) {
  41.             e.printStackTrace();
  42.         }
  43.         return encArray;
  44.     }
  45.  
  46.     public static String decrypt(byte[] str) {
  47.  
  48.         Decoder decoder = Base64.getDecoder();
  49.         byte[] enc = decoder.decode(str);
  50.  
  51.         String result = "";
  52.         byte[] dec = null;
  53.  
  54.         try {
  55.             //복호화 함수 호출
  56.             dec = KISA_SEED_CBC.SEED_CBC_Decrypt(pbUserKey, bszIV, enc, 0, enc.length);
  57.             result = new String(dec, charset);
  58.         } catch (UnsupportedEncodingException e) {
  59.             e.printStackTrace();
  60.         }
  61.  
  62.         System.out.println("decrypt Result = " + result);
  63.         return result;
  64.     }
  65. }


간략 소스 설명


pbszUserKey, pbszIV 선언된 것이

암호화 대칭키, CBC대칭키인데 이것들은

암호화 대칭키는 개인(혹은 회사)의 방침에 맞게 알아서 설정해야 한다고 블로그에 써있었는데..

난 그저 블로그를 참고하여 키 값들을 퍼와서 소스를 짰다.

나중에 기회가 된다면 암호학에 대한 간단한 공부를 하는 것도 괜찮을 것 같다.

이상.






SeedTest.zip