Zum Inhalt springen

Hex-String Vergleich für passwort


freeway86

Empfohlene Beiträge

Hey Leute, bitte helft mir, ich bin echt am verzweifeln:(

Ich möchte in Java den Hex- String den ich in eine Datei gespeichert habe,mit dem textField2 vergleichen. also ich gebe den Hex-String in textField2 ein und dann soll verglichen werden, ob die beiden übereinstimmen. (Nachher soll er den Hex-String aus der Datei in den String wieder umwandeln und den eigentlichen String vergleichen)... Das ganze soll als Passwortprüfung dienen. Hier mal das actionEvent vom Button und die beiden methoden, ist mit Netbeans erstellt:

    private void button1ActionPerformed(java.awt.event.ActionEvent evt) {

        // TODO add your handling code here:

        String zeile = null ;

    try{

            String text = textField1.getText();

            String hash = byteArrayToHexString(testfensterHash.computeHash(text));

            String dateiName = "C:/Test/MDtest.txt";

            FileOutputStream schreibeStrom =

                     new FileOutputStream(dateiName);

            for (int i=0; i < hash.length(); i++){

            schreibeStrom.write((byte)hash.charAt(i));


    }

             System.out.println("Datei ist geschrieben!");

            System.out.println("the computed hash (hex string) : " + hash);

    }

    catch (Exception e){

      e.printStackTrace();

    }

    try {

		BufferedReader in = new BufferedReader(new FileReader("C:/Test/MDtest.txt"));


		while ((zeile = in.readLine()) != null) {

		System.out.println("Gelesene Zeile: " + zeile);

		}

	} catch (IOException e) {

		e.printStackTrace();

	}

    if((textField2.getText().equals(zeile))) // <--   hier das Problem 

    { System.out.println("textfield2 und gelesene datei sind gleich");}

    else{System.out.println("fail");}

    }

//------------------------------------------------------------------------------------------------

   public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                new testfensterHash().setVisible(true);

            }

        });

    }

      public static byte[] computeHash(String x)

  throws Exception

  {

     java.security.MessageDigest d =null;

     d = java.security.MessageDigest.getInstance("MD5");

     d.reset();

     d.update(x.getBytes());

     return  d.digest();

  }


  public static String byteArrayToHexString(byte[] {

     StringBuffer sb = new StringBuffer(b.length * 2);

     for (int i = 0; i < b.length; i++){

       int v = b[i] & 0xff;

       if (v < 16) {

         sb.append('0');

       }

       sb.append(Integer.toHexString(v));

     }

     return sb.toString().toUpperCase();

  }

[/code]

Über andere Methoden oder Verfahren, wie ich das realisieren kann wär ich auch sehr dankbar ......

Ich dreh langsam echt durch und kann google nicht mehr sehen :(

Ich hoffe ihr habt verstanden, was ich machen möchte

Lg freeway86

Bearbeitet von freeway86
etwas vergessen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Nachher soll er den Hex-String aus der Datei in den String wieder umwandeln und den eigentlichen String vergleichen

Da Du im Code mit einem MD5 Hash arbeitest, ist es unmöglich aus dem Hash wieder den Originalwert zu gewinnen Hashfunktion ? Wikipedia

Ich hoffe ihr habt verstanden, was ich machen möchte

Nicht wirklich. Um ein gehashtes Passwort zu vergleichen, vergleichst Du nur die Hashes, sind diese identisch kannst Du davon ausgehen, dass die ungehashten Phrasen identisch sind, obwohl das mathematisch nicht so sein muss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen lieben Danke für deine schnelle Antwort.

Ich versuche mich besser auszudrücken, hier der code für mein eigentliches programm, das davor war nur ne test app. In der Datei MdTest hat er mir die eingabe des buchstaben "a" als: 0CC175B9C0F1B6A831C399E269772661

ausgegeben.

wenn ich in das tfPass jetz genau diesen wert reinschreibe, müsste er doch eigentlich das if ausführen, oder ?!

    private void butOkActionPerformed(java.awt.event.ActionEvent evt) {                                      

        // TODO add your handling code here:


        Object zeile = null;

if ((tfName.getText().equals("a"))) { //hier später select username from tabUsername

                try {

                    BufferedReader in = null;

                    in = new BufferedReader(new FileReader("C:/Test/MDtest.txt"));

                                                        //hier später select passwort from tabPasswort

                    while ((zeile = in.readLine()) != null) {

                        System.out.println("Gelesene Zeile: " + zeile);

                    }

                }  catch (IOException e) {

                    e.printStackTrace();

                }             

if ((tfPass).equals(zeile)) {  // ich kann es nicht vergleichen 

                System.out.println(zeile);

                ArchivAuswahl archivauswahl = new ArchivAuswahl();

                archivauswahl.setVisible(true);

                this.setVisible(false);

            }

else{

JOptionPane.showMessageDialog(butOk, "Bitte gültiges Passwort eingeben !");}

}

else {

    JOptionPane.showMessageDialog(butOk, "Bitte gültigen Benuternamen eingeben !");

}

    }[/code]

Noch mal ein pic um das zu verdeutlichen wass ich möchte

post-69866-14430448626745_thumb.jpg

danach soll das fenster des eigentlichen programmes erscheinen

Lg freeway86

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn ich in das tfPass jetz genau diesen wert reinschreibe, müsste er doch eigentlich das if ausführen, oder ?!

In Deinem Code ist nicht ersichtlich welchen Wert die Variable tfPass hat. Wenn tfPass das Passwort aus der GUI enthält, dann steht dort der Klartext des Passwortes drin und wie schon gesagt, Du musst die Hashs vergleichen!

Link zu diesem Kommentar
Auf anderen Seiten teilen

denne gehts wieder zurück in die weiten Welten des google :(

neues Stichwort: "Hashvergleich"

Ich bezweifle, dass Du etwas passendes finden wirst.

Denk einmal nach, in Deinem GUI Element (ich schätze eine Textbox) steht ein String, dieser steht dort im Klartext und Du hast nun irgendwo den gleichen String als Hash stehen.

Also welche Schritte musst Du nun durchführen, um das Klartextpasswort mit dem Hash zu vergleichen, Du weißt, dass Du aus einem Hash nicht mehr den Originalstring, also das Passwort, zurückrechnen kannst?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja steht in einem text feld ... 1.ich muss also das klarwort in nen hash umwandeln...= DONE 2.dann das klarwort,welches zum hash umgewandelt wurde mit dem hash aus der db (bzw. noch textdatei) ableichen ,irgendwas mit if textfeld1.gethash().equals(select passwort from TabellePasswort) ....? Oder???

Ähh ich seh grad, dass nen textfiel keinen textfield.gethash() zulässt !!! also wie dann?

Bearbeitet von freeway86
Link zu diesem Kommentar
Auf anderen Seiten teilen

if ((tfPass).equals(zeile)) {

if(tfPass instanceof TextField){

your Code is Bull****. Use getText().

}

Wie auch immer. In deinem zuerst geposteten Code wird die Datei zeilenweise gelesen. Die Zeilen werden aber nicht verarbeitet sondern einfach nur ausgegeben. Lediglich die allerletzte zeile (die auch einfach nur ein "" sein kann verarbeitest du. Gib dir doch einfach mal die direkt vor deinem if die Werte von tfPass.getText und zeile aus).

Vom Dateinamen her lässt sich vermuten, dass in der Datei Hashes gespeichert sind und keine Passwörter im Klartext. Aber du vergleichst es offensichtlich mit einem Passwort im Klartext. Wie soll das jemals gleich sein?

Zusatz: Mit einem FileReader liest du eine Datei unter beachtung eines bestimmten charsets ein. Mit FileOutputStream schreibst du lediglich eine bestimmte bytefolge stur raus. Wenn du beides mischst kanns passieren, dass du mal auf die Nase fällst weil dein FileReader die bytes eben interpretiert anstatt sie so zu nehmen wie sie sind.

Merke: FileOutputStream und FileInputStream arbeiten mit Dateien stur binär. FileWriter und FileReader verwenden Charsets.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...