Java 密码猜测程序问题

Java 密码猜测程序问题,java,encryption,brute-force,Java,Encryption,Brute Force,我对Java类的额外学分分配有一些问题。目的是在没有密码的情况下解密文件。它是用PBEWITHSHA1和DESEDE算法加密的,密码是一个没有数字或特殊字符的字典单词 我试图解决这个问题的方法是通过反复猜测密码,直到我使用下面的代码得到正确的密码 我遇到的问题是,extra_out.txt文件是在for循环的第一个周期之后输出的,而我只希望在猜到正确的单词时输出它 因此,当它运行时,我得到一个异常“Encryption Error”,然后输出额外的_out.txt文件(仍然加密),然后再输出99

我对Java类的额外学分分配有一些问题。目的是在没有密码的情况下解密文件。它是用PBEWITHSHA1和DESEDE算法加密的,密码是一个没有数字或特殊字符的字典单词

我试图解决这个问题的方法是通过反复猜测密码,直到我使用下面的代码得到正确的密码

我遇到的问题是,extra_out.txt文件是在for循环的第一个周期之后输出的,而我只希望在猜到正确的单词时输出它

因此,当它运行时,我得到一个异常“Encryption Error”,然后输出额外的_out.txt文件(仍然加密),然后再输出9999个“Encryption Errors”

非常感谢任何有用的建议

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");
    }
  }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Random;
导入java.util.Scanner;
公共类WordGuess{
公共静态void main(字符串[]args){
ArrayList words=新的ArrayList();
随机数=新随机数();
字符串curWord=“”;
试试{
File aFile=新文件(“english.txt”);
扫描仪阅读器=新扫描仪(aFile);
while(reader.hasNext()){
curWord=reader.next();
如果(curWord.length()==5){
添加(curWord);
}
}    
} 
catch(filenotfound异常){
System.out.println(“错误:+e”);
}
对于(int i=0;i<10000;i++){
int rand=Math.abs(numGen.nextInt(words.size());
File fileIn=新文件(“extracredit.enc”);
File fileOut=新文件(“extra_out.txt”);
字符串密码=words.get(rand);
crackFile(文件输入、文件输出、密码);
}
}
公共静态文件(文件输入、文件输出、字符串密码){
试一试{
密码c=新密码(密码);
byte[]bytes=FileIO.read(输入);
write(输出,c.decrypt(字节));
} 
捕获(IOE异常){
System.out.println(“无法读取/写入文件”);
}
捕获(例外e){
System.out.println(“加密错误”);
}
}
}

如果
c.decrypt(bytes)
引发异常,我会希望文件不会被写入。也许您应该将
e.printStackTrace()
添加到两个catch子句中,以查看到底出了什么问题。或者将解密调用与
FileIO.write()
调用分开,并使用调试器逐步执行。最后,除非密码是巨大的,你能把它添加到你的代码中,这样我就可以试着运行整个程序了吗?好的,谢谢,我会试着处理一下。下面是Crypt类: