У меня нет проблем с неработающим кодом, но это сбивает с толку, и я не знаю, почему, хотя я использую строку длиной 16 байтов (поэтому заполнение не требуется), у меня получился странный короткий вывод cG + etVq + 7l +RfJS27jCtwg == (без заполнения, но до записи он был длиной 16 байт)
против
cG + etVq + 7l + RfJS27jCtwskFauqkVxpbMJGODZoZe5c = (с PKCS5Padding, но тем не менее?
public class AES {
private static SecretKeySpec secretKey;
private static byte[] key;
public static void setKey(String myKey)
{
key = myKey.getBytes("UTF-8");
secretKey = new SecretKeySpec(key, "AES");
}
public static String encrypt(String strToEncrypt, String secret)
{
try
{
setKey(secret);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
}
catch (Exception e)
{
System.out.println("Error while encrypting: " + e.toString());
}
return null;
}
public static String decrypt(String strToDecrypt, String secret)
{
try
{
setKey(secret);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
}
catch (Exception e)
{
System.out.println("Error while decrypting: " + e.toString());
}
return null;
}
public static SecretKeySpec getSecretKey() {
return secretKey;
}
public static void setSecretKey(SecretKeySpec secretKey) {
AES.secretKey = secretKey;
}
public static byte[] getKey() {
return key;
}
public static void setKey(byte[] key) {
AES.key = key;
}
}