package com.thundermoose.plugins.utils;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class Encrypter {
private Cipher ecipher;
private Cipher dcipher;
private SecretKey secretKey;
public Encrypter(byte[] key) throws EncryptionException {
try {
secretKey = new SecretKeySpec(key, "AES");
ecipher = Cipher.getInstance("AES");
dcipher = Cipher.getInstance("AES");
ecipher.init(Cipher.ENCRYPT_MODE, secretKey);
dcipher.init(Cipher.DECRYPT_MODE, secretKey);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException e) {
throw new EncryptionException("Could not initialize secret key", e);
}
}
public String encrypt(String value) throws EncryptionException {
try {
byte[] utf8 = value.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
return new String(Base64.getEncoder().encode(enc));
} catch (UnsupportedEncodingException | BadPaddingException | IllegalBlockSizeException e) {
throw new EncryptionException("Could not encrypt string", e);
}
}
public String decrypt(String value) throws EncryptionException {
try {
byte[] dec = Base64.getDecoder().decode(value.getBytes());
byte[] utf8 = dcipher.doFinal(dec);
return new String(utf8, "UTF8");
} catch (UnsupportedEncodingException | BadPaddingException | IllegalBlockSizeException e) {
throw new EncryptionException("Could not decrypt string", e);
}
}
}