Мой метод расшифровки AES вызывает исключение javax.crypto.BadPaddingException, и я не знаю, почему это происходит, поскольку я новичок в java и алгоритме шифрования AES. Я прошел через мой код с помощью отладчика и обнаружил Cipher cipher = Cipher.getInstance ("AES / ECB / PKCS5PADDING"); вызывает эту ошибку У кого-нибудь есть идеи, как решить эту проблему? Поэтому моя программа должна расшифровать массив зашифрованных строк AES, а метод шифрования предназначен только для тестирования.
Метод SetKey: -
public static void setKey(String myKey) {
MessageDigest sha = null;
try {
key = myKey.getBytes("UTF-8");
sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16);
secretKey = new SecretKeySpec(key, "AES");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
Метод расшифровки AES: -
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 encrypting " + e.toString());
}
return null;
}
Метод шифрования 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 void main(String[] args) {
System.out.println(decrypt("kh4pOGsXY1cWiLsePjrpdbS9ZED7NKbzBiQ8GX9VrBg=","eC9UDz6zYZ3gJaxa"));
}
}
Трассировка стека: -
Error while encrypting javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
null