Я делаю простую Java-программу, которая читает зашифрованный текст AES из TXT-файла и расшифровывает его для печати в текстовое поле. Я проверил это в моей IDE, и все заработало. Однако, если я создаю .jar и открываю его, текст не добавляется в текстовое поле.
Он находит файл .txt, читает текст, но я думаю, что есть проблема с расшифровкой.
public String decryptAES(String input, String key, String initVector){
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.decodeBase64(input));
return new String(original);
Особенно строка byte[] original = cipher.doFinal(Base64.decodeBase64(input));
может быть причиной проблемы. Я просто не могу понять, почему он не будет работать с автономным .jar.
Редактировать: Я пытался пошагово отлаживать банку сам. Печать трассировки стека в MsgBoxes и добавление комментариев и всего прочего, чтобы увидеть, где он останавливается. Никаких следов стека мне не показали. Кажется, он остановился прямо перед упомянутой строкой:
byte [] original = cipher.doFinal (Base64.decodeBase64 (input));
Edit2: шифрование работает просто отлично. Также вне IDE. Вот часть:
public String encryptAES(String input, String key, String initVector)
{
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(input.getBytes());
return Base64.encodeBase64String(encrypted);