KISA에서 제공하는 Seed 암호화 알고리즘 예제
사용가이드 및 암호화에 필요한 .java파일을 다운받을 수 있는 링크를 아래에 첨부하였습니다.
https://seed.kisa.or.kr/kisa/Board/17/detailView.do
오늘 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 사용자 입력에 대한 평문 출력
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 };
public static byte[] encrypt(String str) {
byte[] enc = null;
try {
//암호화 함수 호출
enc = KISA_SEED_CBC.SEED_CBC_Encrypt(pbUserKey, bszIV, str.getBytes(charset), 0,
str.getBytes(charset).length);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Encoder encoder = Base64.getEncoder();
byte[] encArray = encoder.encode(enc);
try {
System.out.println(new String(encArray, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encArray;
}
public static String decrypt(byte[] str) {
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);
result = new String(dec, charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("decrypt Result = " + result);
return result;
테스트
@Test
void testCBC() {
BlcokAlgorithm_Service cbc=new BlcokAlgorithm_Service();
String before="aaaa";
String After_encrypt=new String(cbc.encrypt(before));
String After_decrypt=cbc.decrypt(After_encrypt.getBytes());
assertEquals(before, After_decrypt);
}
간략 소스 설명
pbszUserKey, pbszIV 선언된 것이
암호화 대칭키, CBC대칭키인데 이것들은
암호화 대칭키는 개인(혹은 회사)의 방침에 맞게 알아서 설정해야 한다고 블로그에 써있었는데..
난 그저 블로그를 참고하여 키 값들을 퍼와서 소스를 짰다.
나중에 기회가 된다면 암호학에 대한 간단한 공부를 하는 것도 괜찮을 것 같다.
이상.
출처: https://ktko.tistory.com/entry/Java-SEED-암호화-예제 [KTKO 개발 블로그와 여행 일기]
'Security > etc' 카테고리의 다른 글
SSL TSL Security (0) | 2019.07.19 |
---|