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