KISA에서 제공하는 Seed 암호화 알고리즘 예제
사용가이드 및 암호화에 필요한 .java파일을 다운받을 수 있는 링크를 아래에 첨부하였습니다.
오늘 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 사용자 입력에 대한 평문 출력
- package com.javalec.security.seed;
- import java.io.UnsupportedEncodingException;
- import java.util.Base64;
- import java.util.Base64.Decoder;
- import java.util.Base64.Encoder;
- public class Main {
- public static byte pbUserKey[] = { (byte) 0x2c, (byte) 0x11, (byte) 0x19, (byte) 0x1d, (byte) 0x1f, (byte) 0x16, (byte) 0x12,
- (byte) 0x12, (byte) 0x11, (byte) 0x19, (byte) 0x1d, (byte) 0x1f, (byte) 0x10, (byte) 0x14, (byte) 0x1b,
- (byte) 0x16 };
- public static byte bszIV[] = { (byte) 0x27, (byte) 0x28, (byte) 0x27, (byte) 0x6d, (byte) 0x2d, (byte) 0xd5, (byte) 0x4e,
- (byte) 0x29, (byte) 0x2c, (byte) 0x56, (byte) 0xf4, (byte) 0x2a, (byte) 0x65, (byte) 0x2a, (byte) 0xae,
- (byte) 0x08 };
- // TODO Auto-generated method stub
- byte[] encryptData = encrypt("ktko");
- decrypt(encryptData);
- }
- byte[] enc = null;
- try {
- //암호화 함수 호출
- enc = KISA_SEED_CBC.SEED_CBC_Encrypt(pbUserKey, bszIV, str.getBytes(charset), 0,
- str.getBytes(charset).length);
- e.printStackTrace();
- }
- Encoder encoder = Base64.getEncoder();
- byte[] encArray = encoder.encode(enc);
- try {
- e.printStackTrace();
- }
- return encArray;
- }
- Decoder decoder = Base64.getDecoder();
- byte[] enc = decoder.decode(str);
- String result = "";
- byte[] dec = null;
- try {
- //복호화 함수 호출
- dec = KISA_SEED_CBC.SEED_CBC_Decrypt(pbUserKey, bszIV, enc, 0, enc.length);
- e.printStackTrace();
- }
- return result;
- }
- }
간략 소스 설명
pbszUserKey, pbszIV 선언된 것이
암호화 대칭키, CBC대칭키인데 이것들은
암호화 대칭키는 개인(혹은 회사)의 방침에 맞게 알아서 설정해야 한다고 블로그에 써있었는데..
난 그저 블로그를 참고하여 키 값들을 퍼와서 소스를 짰다.
나중에 기회가 된다면 암호학에 대한 간단한 공부를 하는 것도 괜찮을 것 같다.
이상.
'보안' 카테고리의 다른 글
전자정부프레임워크(eGovframework) DB암호화 방법 및 가이드 (0) | 2017.09.20 |
---|---|
비밀번호와 Hash(해시) (0) | 2017.08.22 |