암복호화프로그램
프로그램용도 | 구현할 Java인터페이스 | 적용할 설정화면 |
---|---|---|
암복호화프로그램 | SecurityProcess, SecurityBlockProcess | 기본설정관리>암호화정보 |
암복호화 프로그램은 기관 및 시스템 전문에서 암복호화를 사용하는 경우 개발한다.
암호화그룹에 등록한 정보(EX. 암호화키 길이, 인코딩 방식 등)가 필요한 경우 SecurityBlockProcess
를 구현하고,
그렇지 않은 경우에는 SecurityProcess
를 구현한다.
적용 시, 요청 시에는 필드를 복호화하고, 응답 시에는 다시 암호화하여 전송하게 된다.
정보
만약 BXI에서 제공하는 SEED-256, ARIA-256, AES-256, T-DES 등의 기본 암호화 알고리즘을 사용하는 경우에는 별도의 프로그램 개발 없이 BXI에서 제공하는 프로그램을 사용할 수 있다. (ex. AesCipher, AesSecurity 등)
개발방법
암호화 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;
}
☑ 입력
- secretKey : 암호화 키
- plainText : plain 텍스트
- charsetName : 캐릭터셋
☑ 출력
- 암호화하여 Encoding한 데이터
복호화 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;
}
☑ 입력
- secretKey : 암호화 키
- encryptedText : 암호화된 텍스트
- charsetName : 캐릭터셋
☑ 출력
- 복호화 데이터
전체 예제
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;
}
}