Programmierung mit Hash

Diskutiere Programmierung mit Hash im Java Basics - Anfänger-Themen Bereich.
L

Louis12

Hallo

Leider komme ich hier nicht sehr weit ich, wollte fragen ob ihr mir helfen könnt.

Ich würde mich sehr freuen, da ich wirklich nicht weiß wie ich weitervorgehen soll





Implementieren Sie hier die Klasse AppendOrHashThread (siehe Vorlage: ha03/src/main/java/AppendOrHashThread.java).

Betrachten Sie dazu auch die Klassen Hasher (siehe Vorlage: ha03/src/main/java/Hasher.java) und Data (siehe Vorlage: ha03/src/main/java/Data.java), sowie die Klasse Main (siehe Vorlage: ha03/src/main/Main.java).

Implementieren Sie mittels dieser Klasse einen Thread, der eine ID (Typ String) als Attribut hat. Außerdem hat die Klasse ein Attribut nextThread vom Typ AppendOrHashThread. Der Thread soll seine ID an die statische Referenz word (Data.java) ranhängen oder aber word mittels Hasher.hash() hashen. Wurde word gehashed soll ebenfalls die statische Referenz currentIterations inkrementiert werden. Threads des Typs AppendOrHashThread sollen in einer festen Reihenfolge ausgeführt werden: zuerst zwei Threads die ihre ID an word ranhängen (append) gefolgt von einem Thread der word hashed. Nachdem das word gehashed wurde soll eine neue Iteration beginnen.


Ein Wort wird in einer Iteration jeweils um die ID von t1 und t2 erweitert, indem die IDs beider Threads mit dem Wort konkateniert werden. Dabei ist streng zu beachten, dass zuerst die ID von t1 und dann die ID von t2 an das Wort gehangen wird. Bevor eine neue Iteration beginnt, wird das Wort mit den IDs der Threads in einem eigenen Thread t3 gehashed (nutzen Sie dazu Hasher.hash() aus der Vorlage).

Beispiel:

Sei word="", t1="A" und t2="B"

Dann passiert folgendes in Iteration 1:

t1 wird ausgeführt -> word="A"

t2 wird ausgeführt -> word="A" + "B"

t3 wird ausgeführt -> word=Hasher.hash(word)

In Iteration 2 wird dann wie folgt weiter gemacht:

t1 wird ausgeführt -> word=Hasher.hash(word)+"A"

t2 wird ausgeführt -> word=Hasher.hash(word)+"A" + "B" // * word wie in t3 aus 1. Iteration

t3 wird ausgeführt -> word=Hasher.word(Hasher.hash(word)+"A" + "B") // * word wie in t3 aus 1. Iteration

usw ...

Dieser Ablauf soll numOfIterations-mal (siehe Data.java) ausgeführt werden.


Beispiel:
Test Result
Main.test("A", "B"); fa2551a2e3d3924217fa85ab99413e54
Main.test(null, null); c50f3cfb68b1f71cefc732b2bca5e4a0









Klasse Data
Code:
public class Data {


    public static int numOfIterations = 5000;
    public static int currentIterations = 0;
    public static String word = "";

    public static boolean verify(String t1, String t2, String hash) {
        // TODO: implement me
        return false;
    }


}
Code:
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Hasher {


    public static String hash(String word) {
        String result = null;
        try {

            MessageDigest md = MessageDigest.getInstance("MD5");
            BigInteger n = new BigInteger(1, md.digest(word.getBytes()));
            result = String.format("%1$32s", n.toString(16)).replace(" ", "0");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return result;
    }

}

Code:
public class Main {

    public static void main(String[] args) {

        // Quiz #3 Aufgabe 3
        // t1 -> AppendOrHashThread("A") & t2 -> AppendOrHashThread("B") x 5000 Iterationen
        // t1 -> AppendOrHashThread(null) & t2 -> AppendOrHashThread(null) x 5000 Iterationen

        // Quiz #3 Aufgabe 4
        System.out.println(Data.verify("A", "B", "c95ac9f9c7ffe17093466ef2a6bce3aa"));

        System.out.println(Data.verify(null, null, "7fcb4080ccece5443aa2a49ed29f4421"));
    }

}






Mein Code

Code:
public class AppendOrHashThread {


    public String id;

    public AppendOrHashThread nextThread;


    public AppendOrHashThread() {
    }


    Thread t1 = new Thread(new MyThread(), "T1");
    Thread t2 = new Thread(new MyThread(), "T2");
    Thread t3 = new Thread(new MyThread(), "T3");


    class MyThread implements Runnable {
        @Override
        public void run() {
            Thread t = Thread.currentThread();
            System.out.println("Thread started: " + t.getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread ended: " + t.getName());

        }


    }

}
 
J

JavaJens

:cool:
Willst Du mit dem fertigen Programm dann Rainbow Tables (MD5=WPA2 Verschlüsselung) erstellen?
Wenn ja ….. da gibt es doch bereits Anwendungen für (Pyrit, Cain&Abel, usw.) die zumindest teilweise schneller sein dürften als Java (und auf die Geschwindigkeit kommt es doch eigentlich an).

Was Java angeht .... sorry(!) dann bin ich viel zu sehr Anfänger, dass ich Dir helfen könnte.
 
Thema: 

Programmierung mit Hash

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben