Encryptor, KeyFactory 제거
parent
60a87e8d35
commit
442df0ed6e
@ -1,80 +0,0 @@
|
||||
package cokr.xit.base.security.crypto;
|
||||
|
||||
import java.security.Key;
|
||||
import java.util.Base64;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
|
||||
import cokr.xit.foundation.AbstractComponent;
|
||||
|
||||
public class Encryptor extends AbstractComponent {
|
||||
private String algorithm;
|
||||
private Key key;
|
||||
private IvParameterSpec iv;
|
||||
private Cipher cipher;
|
||||
|
||||
/**알고리즘을 반환한다.
|
||||
* @return 알고리즘
|
||||
*/
|
||||
public String getAlgorithm() {
|
||||
return algorithm;
|
||||
}
|
||||
|
||||
/**알고리즘을 설정한다.
|
||||
* @param algorithm 알고리즘
|
||||
* @return Encryptor
|
||||
*/
|
||||
public Encryptor setAlgorithm(String algorithm) {
|
||||
this.algorithm = algorithm;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**SecretKey를 반환한다.
|
||||
* @return SecretKey
|
||||
*/
|
||||
public Key getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
/**SecretKey를 설정한다.
|
||||
* @param key SecretKey
|
||||
* @return Encryptor
|
||||
*/
|
||||
public Encryptor setKey(Key key) {
|
||||
this.key = key;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**iv를 반환한다.
|
||||
* @return iv
|
||||
*/
|
||||
public IvParameterSpec getIv() {
|
||||
return iv;
|
||||
}
|
||||
|
||||
/**iv를 설정한다.
|
||||
* @param iv iv
|
||||
* @return Encryptor
|
||||
*/
|
||||
public Encryptor setIv(IvParameterSpec iv) {
|
||||
this.iv = iv;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String encrypt(String str) {
|
||||
if (isEmpty(str)) return "";
|
||||
|
||||
try {
|
||||
if (cipher == null) {
|
||||
cipher = Cipher.getInstance(algorithm);
|
||||
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
|
||||
}
|
||||
byte[] cipherText = cipher.doFinal(str.getBytes());
|
||||
return Base64.getEncoder()
|
||||
.encodeToString(cipherText);
|
||||
} catch (Exception e) {
|
||||
throw applicationException(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
package cokr.xit.base.security.crypto;
|
||||
|
||||
import java.security.Key;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.spec.KeySpec;
|
||||
import java.util.List;
|
||||
|
||||
import javax.crypto.KeyGenerator;
|
||||
import javax.crypto.SecretKeyFactory;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.PBEKeySpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import cokr.xit.foundation.AbstractComponent;
|
||||
|
||||
public class KeyFactory extends AbstractComponent {
|
||||
private int keySize;
|
||||
private String algorithm;
|
||||
private KeyGenerator keyGen;
|
||||
|
||||
/**키 사이즈를 반환한다.
|
||||
* @return 키 사이즈
|
||||
*/
|
||||
public int getKeySize() {
|
||||
return Math.max(128, keySize);
|
||||
}
|
||||
|
||||
/**키 사이즈를 설정한다.
|
||||
* @param keySize 키 사이즈(128, 192, 또는 256 비트)
|
||||
* @return KeyFactory
|
||||
*/
|
||||
public KeyFactory setKeySize(int keySize) {
|
||||
if (!List.of(128, 192, 256).contains(keySize))
|
||||
throw new IllegalArgumentException("keySize must be either of 128, 192, 256");
|
||||
|
||||
this.keySize = keySize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**알고리즘을 반환한다.
|
||||
* @return 알고리즘
|
||||
*/
|
||||
public String getAlgorithm() {
|
||||
return ifEmpty(algorithm, "AES");
|
||||
}
|
||||
|
||||
/**알고리즘을 설정한다.
|
||||
* @param algorithm 알고리즘
|
||||
* @return KeyFactory
|
||||
*/
|
||||
public KeyFactory setAlgorithm(String algorithm) {
|
||||
this.algorithm = algorithm;
|
||||
return this;
|
||||
}
|
||||
|
||||
public static IvParameterSpec generateIv(int size) {
|
||||
byte[] iv = new byte[size];
|
||||
new SecureRandom().nextBytes(iv);
|
||||
return new IvParameterSpec(iv);
|
||||
}
|
||||
|
||||
public Key create() {
|
||||
try {
|
||||
if (keyGen == null) {
|
||||
keyGen = KeyGenerator.getInstance(getAlgorithm());
|
||||
keyGen.init(getKeySize());
|
||||
}
|
||||
return keyGen.generateKey();
|
||||
} catch (Exception e) {
|
||||
throw applicationException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Key create(String str, String salt) {
|
||||
if (isEmpty(str) || isEmpty(salt)) return null;
|
||||
|
||||
try {
|
||||
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
|
||||
KeySpec spec = new PBEKeySpec(str.toCharArray(), salt.getBytes(), 65536, getKeySize());
|
||||
return new SecretKeySpec(skf.generateSecret(spec).getEncoded(), getAlgorithm());
|
||||
} catch (Exception e) {
|
||||
throw applicationException(e);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue