У меня есть несколько проблем с дополнительным кредитом для моего класса 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");
}
}
}
c.decrypt(bytes)
выдаст исключение. Возможно, вам следует добавитьe.printStackTrace()
к обоим вашим предложениям catch, чтобы увидеть, что именно пошло не так. Или отделите вызов расшифровки от вызоваFileIO.write()
и выполните его с помощью отладчика. Наконец, если толькоCrypt
не огромен, можете ли вы добавить его в свой код, чтобы я мог попытаться запустить его целиком? - person Duncan Jones   schedule 03.04.2014