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