ARIA 추가
parent
6b94287244
commit
5e331b873f
@ -0,0 +1,120 @@
|
||||
package cokr.xit.foundation.data;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
import org.egovframe.rte.fdl.cryptography.EgovPasswordEncoder;
|
||||
import org.egovframe.rte.fdl.cryptography.impl.EgovARIACryptoServiceImpl;
|
||||
|
||||
import cokr.xit.foundation.AbstractComponent;
|
||||
|
||||
/**ARIA 기반의 암/복호화 서비스를 제공하는 컴포넌트
|
||||
* @author mjkhan
|
||||
*/
|
||||
public class ARIA extends AbstractComponent {
|
||||
private String
|
||||
key,
|
||||
algorithm;
|
||||
private int blockSize;
|
||||
|
||||
private EgovPasswordEncoder passwordEncoder;
|
||||
private EgovARIACryptoServiceImpl aria;
|
||||
|
||||
/**키를 반환한다.
|
||||
* @return 키
|
||||
*/
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
/**키를 설정한다.
|
||||
* @param key 키
|
||||
* @return 현재 ARIA
|
||||
*/
|
||||
public ARIA setKey(String key) {
|
||||
this.key = key;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**알고리즘을 반환한다. 디폴트는 SHA-256.
|
||||
* @return 알고리즘
|
||||
*/
|
||||
public String getAlgorithm() {
|
||||
return algorithm;
|
||||
}
|
||||
|
||||
/**알고리즘을 설정한다. 디폴트는 SHA-256.
|
||||
* @param algorithm 알고리즘
|
||||
* @return 현재 ARIA
|
||||
*/
|
||||
public ARIA setAlgorithm(String algorithm) {
|
||||
this.algorithm = algorithm;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**블록사이즈를 반환한다. 디폴트는 1024.
|
||||
* @return 블록사이즈
|
||||
*/
|
||||
public int getBlockSize() {
|
||||
return blockSize < 1 ? 1024 : blockSize;
|
||||
}
|
||||
|
||||
/**블록사이즈를 설정한다. 디폴트는 1024.
|
||||
* @param blockSize 블록사이즈
|
||||
* @return 현재 ARIA
|
||||
*/
|
||||
public ARIA setBlockSize(int blockSize) {
|
||||
this.blockSize = blockSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**주어진 문자열(평문)을 암호화하여 반환한다.
|
||||
* @param plain 문자열(평문)
|
||||
* @return 암호화한 문자열
|
||||
*/
|
||||
public String encrypt(String plain) {
|
||||
if (isEmpty(plain)) return "";
|
||||
|
||||
byte[] bytes = service().encrypt(plain.getBytes(), key);
|
||||
return Base64.getEncoder().encodeToString(bytes);
|
||||
}
|
||||
|
||||
private EgovPasswordEncoder passwordEncoder() {
|
||||
if (passwordEncoder == null) {
|
||||
passwordEncoder = new EgovPasswordEncoder();
|
||||
String hashed = passwordEncoder.encryptPassword(notEmpty(key, "key"));
|
||||
passwordEncoder.setHashedPassword(hashed);
|
||||
if (!isEmpty(algorithm))
|
||||
passwordEncoder.setAlgorithm(algorithm);
|
||||
}
|
||||
return passwordEncoder;
|
||||
}
|
||||
|
||||
private EgovARIACryptoServiceImpl service() {
|
||||
if (aria == null) {
|
||||
aria = new EgovARIACryptoServiceImpl();
|
||||
aria.setPasswordEncoder(passwordEncoder());
|
||||
aria.setBlockSize(getBlockSize());
|
||||
}
|
||||
return aria;
|
||||
}
|
||||
|
||||
/**주어진 문자열(암호화)을 복호화하여 반환한다.
|
||||
* @param encrypted 문자열(암호화)
|
||||
* @return 복호화한 문자열
|
||||
*/
|
||||
public String decrypt(String encrypted) {
|
||||
byte[] bytes = Base64.getDecoder().decode(encrypted);
|
||||
return new String(service().decrypt(bytes, key));
|
||||
}
|
||||
|
||||
/**현재 설정상태를 비운다.
|
||||
* @return 현재 ARIA
|
||||
*/
|
||||
public ARIA clear() {
|
||||
key = algorithm = null;
|
||||
blockSize = 0;
|
||||
passwordEncoder = null;
|
||||
aria = null;
|
||||
return this;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue