암복호화 프로그램
프로그램용도 | 구현할 인터페이스 | 적용할 설정화면 |
---|---|---|
암복호화프로그램 |
SecurityProcess, SecurityBlockProcess |
기본설정관리>암호화정보 |
암복호화 프로그램은 기관 및 시스템 전문에서 암복호화를 사용하는 경우 개발한다. 암호화그룹에 등록한 정보(EX. 암호화키 길이, 인코딩 방식 등)가 필요한 경우 SecurityBlockProcess를 구현하고, 그렇지 않은 경우에는 SecurityProcess를 구현한다. 적용하면 요청 시에는 필드를 복호화하고, 응답 시에는 다시 암호화하여 전송하게 된다.
만약 BXI에서 제공하는 SEED-256, ARIA-256, AES-256, T-DES 등의 기본 암호화 알고리즘을 사용하는 경우에는 별도의 프로그램 개발 없이 BXI에서 제공하는 프로그램을 사용할 수 있다. (ex. AesCipher, AesSecurity 등) |
1. 개발방법
1.1. 암호화 API
전문이나 특정 필드의 데이터를 암호화하고 Encoding한다.
@Override
public byte[] encrypt(String secretKey, String plainText, String charsetName) {
try {
return encrypt(secretKey, plainText.getBytes(charsetName));
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public byte[] encrypt(String secretKey, byte[] plainText) {
byte[] result = Base64.getEncoder().encode(plainText);
logger.debug("plain text: {} -> encrypted text: {}",
new String(plainText, StandardCharsets.UTF_8), new String(result, StandardCharsets.UTF_8));
return result;
}
1.2. 복호화 API
암호화된 데이터를 Decoding하고 복호화한다.
@Override
public byte[] decrypt(String secretKey, String encryptedText, String charsetName) {
try {
return decrypt(secretKey, encryptedText.getBytes(charsetName));
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public byte[] decrypt(String secretKey, byte[] encryptedText) {
byte[] result = Base64.getDecoder().decode(encryptedText);
logger.debug("encrypted text: {} -> plain text: {}",
new String(encryptedText, StandardCharsets.UTF_8), new String(result, StandardCharsets.UTF_8));
return result;
}
2. 전체 예제
package bxi.extension.sample;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import bxi.api.SecurityProcess;
@Component
public class SecurityProcessImpl implements SecurityProcess {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public byte[] encrypt(String secretKey, String plainText, String charsetName) {
try {
return encrypt(secretKey, plainText.getBytes(charsetName));
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public byte[] encrypt(String secretKey, byte[] plainText) {
byte[] result = Base64.getEncoder().encode(plainText);
logger.debug("plain text: {} -> encrypted text: {}",
new String(plainText, StandardCharsets.UTF_8), new String(result, StandardCharsets.UTF_8));
return result;
}
@Override
public byte[] decrypt(String secretKey, String encryptedText, String charsetName) {
try {
return decrypt(secretKey, encryptedText.getBytes(charsetName));
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public byte[] decrypt(String secretKey, byte[] encryptedText) {
byte[] result = Base64.getDecoder().decode(encryptedText);
logger.debug("encrypted text: {} -> plain text: {}",
new String(encryptedText, StandardCharsets.UTF_8), new String(result, StandardCharsets.UTF_8));
return result;
}
}