Я прохожу курс криптографии, но некоторые вещи, описанные моим учителем, действительно неясны и плохо объяснены.
Он попросил меня создать алгоритм на Java для создания таблицы RT (хэш/текст) и иметь файл (test.txt), который содержит 100 хэшей для «взлома». Итак, я нахожусь на этапе, когда мне нужно сравнить два файла. Но мне это кажется слишком «простым», я мог бы посмотреть в своем курсе, и мы говорим о сокращении функций, но я не вижу, как (когда) это реализовать.
Я уже мог читать файл, и я мог читать построчно свой большой файл и сравнивать каждый хеш с моим маленьким. Я не знаю, где и особенно как реализовать в моем алгоритме приведение функции и в чем оно заключается.
Большое спасибо за вашу помощь, если нужно, я помещаю свой код.
private static void bufferedReaderFilePasswordFirst() throws IOException {
Path path = Paths.get("C:\\Users\\basil\\OneDrive - Haute Ecole Bruxelles Brabant (HE2B)\\Documents\\NetBeansProjects\\sha256\\passwords.txt");
int nbOfLine = 0;
StringBuffer oui = new StringBuffer();
List<String> test = hashMap();
final DecimalFormat df = new DecimalFormat();
final DecimalFormatSymbols ds = df.getDecimalFormatSymbols();
ds.setGroupingSeparator('_');
df.setDecimalFormatSymbols(ds);
try (BufferedReader readerPasswordGenerate = Files.newBufferedReader(path, Charset.forName("UTF-8"));) {
String currentLinePassword = null;
long start = System.nanoTime();
while(((currentLinePassword = readerPasswordGenerate.readLine()) != null)){
String firstWord = currentLinePassword.substring(0, currentLinePassword.indexOf(":"));
int indexList = test.indexOf(firstWord);
if(indexList!=-1){
System.out.println(indexList);
String secondWord = currentLinePassword.substring(currentLinePassword.lastIndexOf(":") + 1);
oui.append(secondWord).append(System.lineSeparator());
}
nbOfLine++;
if(nbOfLine%1_000_000==0){
System.out.printf(
"%s / %s%n",
df.format(nbOfLine),
df.format(10000000));
}
}
System.out.println(oui);
final long consumed = System.nanoTime() - start;
final long totConsumed = TimeUnit.NANOSECONDS.toMillis(consumed);
final double tot = (double) totConsumed;
System.out.printf("Done. Took %s seconds", (tot / 1000));
} catch (IOException ex) {
ex.printStackTrace(); //handle an exception here
}
}
Список тестов — это всего лишь список из 100 хэшей, которые нужно взломать.