Проблемы с программой подбора пароля

У меня есть несколько проблем с дополнительным кредитом для моего класса Java. Цель состоит в том, чтобы расшифровать файл без пароля. Он зашифрован с помощью алгоритма PBEWithSHA1AndDESede, а пароль представляет собой словарное слово без цифр или специальных символов.

Я пытаюсь решить эту проблему, угадывая пароль снова и снова, пока не получу его правильно, используя приведенный ниже код.

Проблема, с которой я сталкиваюсь, заключается в том, что файл extra_out.txt выводится после первого цикла цикла for, когда я хочу, чтобы он выводился только в том случае, если угадывается правильное слово.

Поэтому, когда он запускается, я получаю исключение «Ошибка шифрования», а затем выводится файл extra_out.txt (все еще зашифрованный), а затем еще 9999 «Ошибок шифрования».

Любые полезные советы очень ценятся!

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException;
import java.util.ArrayList; 
import java.util.Arrays;
import java.util.Random; 
import java.util.Scanner; 

public class WordGuess { 

  public static void main(String[] args) {  
    ArrayList<String> words = new ArrayList();  
    Random numGen = new Random(); 
    String curWord = ""; 

    try { 
      File aFile = new File("english.txt"); 
      Scanner reader = new Scanner(aFile); 

      while (reader.hasNext()) { 
        curWord = reader.next(); 

        if (curWord.length() == 5) { 
          words.add(curWord); 
        }
      }    
    } 

    catch (FileNotFoundException e) { 
      System.out.println("Error: " + e); 
    }

    for(int i = 0; i < 10000; i++){ 
      int rand = Math.abs(numGen.nextInt(words.size()));    
      File fileIn = new File("extracredit.enc");
      File fileOut = new File("extra_out.txt");
      String password = words.get(rand);
      crackFile(fileIn, fileOut, password); 
    }
  }

  public static void crackFile(File input, File output, String password) {
    try{
      Crypt c = new Crypt(password);
      byte[] bytes = FileIO.read(input);
      FileIO.write(output, c.decrypt(bytes));
    } 
    catch (IOException e) {
      System.out.println("Could not read/write file");  
    }
    catch (Exception e) {
      System.out.println("Encryption error");
    }
  }
}

person user3491516    schedule 02.04.2014    source источник
comment
Я ожидал, что файл не будет записан, если c.decrypt(bytes) выдаст исключение. Возможно, вам следует добавить e.printStackTrace() к обоим вашим предложениям catch, чтобы увидеть, что именно пошло не так. Или отделите вызов расшифровки от вызова FileIO.write() и выполните его с помощью отладчика. Наконец, если только Crypt не огромен, можете ли вы добавить его в свой код, чтобы я мог попытаться запустить его целиком?   -  person Duncan Jones    schedule 03.04.2014
comment
Ок, спасибо, попробую поковыряться. Вот класс Crypt: pastebin.com/2G7xyada   -  person user3491516    schedule 03.04.2014