freeway86 Geschrieben 12. März 2010 Geschrieben 12. März 2010 (bearbeitet) 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 12. März 2010 von freeway86 etwas vergessen Zitieren
flashpixx Geschrieben 12. März 2010 Geschrieben 12. März 2010 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. Zitieren
freeway86 Geschrieben 12. März 2010 Autor Geschrieben 12. März 2010 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 danach soll das fenster des eigentlichen programmes erscheinen Lg freeway86 Zitieren
flashpixx Geschrieben 12. März 2010 Geschrieben 12. März 2010 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! Zitieren
freeway86 Geschrieben 12. März 2010 Autor Geschrieben 12. März 2010 Ok .... denne gehts wieder zurück in die weiten Welten des google neues Stichwort: "Hashvergleich" Ich danke dir für deine schnellen Antworten und werde bestimmt bald nen neues Prob haben Lg Freeway Zitieren
flashpixx Geschrieben 12. März 2010 Geschrieben 12. März 2010 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? Zitieren
LadyPreis Geschrieben 15. März 2010 Geschrieben 15. März 2010 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? Wink mit dem ganzen Zaun Zitieren
freeway86 Geschrieben 15. März 2010 Autor Geschrieben 15. März 2010 (bearbeitet) 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 15. März 2010 von freeway86 Zitieren
LadyPreis Geschrieben 15. März 2010 Geschrieben 15. März 2010 klingt doch schonmal nicht schlecht. Probier es doch mal aus. Wenns funktioniert... wunderbar. Wenn nicht... nachfragen Zitieren
flashpixx Geschrieben 15. März 2010 Geschrieben 15. März 2010 Ähh ich seh grad, dass nen textfiel keinen textfield.gethash() zulässt !!! also wie dann? Denk doch bitte mal nach! Du hast doch auch mal das Passwort am Anfang in einen Hash umgewandelt....... Zitieren
freeway86 Geschrieben 15. März 2010 Autor Geschrieben 15. März 2010 (bearbeitet) wie kann ich mir den das dann abholen?! ich komm nicht drauf Hab doch erbamen und gib mir einen tip Bearbeitet 15. März 2010 von freeway86 Zitieren
flashpixx Geschrieben 15. März 2010 Geschrieben 15. März 2010 function String createmyHash(String myClearText) {...} If (createmyHash( textfeld.gettext ).equals( myReadHash ) then okay else fail Zitieren
freeway86 Geschrieben 15. März 2010 Autor Geschrieben 15. März 2010 :e@sy *kuss* läuft.... hätte ich nie gefunden wie haste das gefunden Zitieren
flashpixx Geschrieben 15. März 2010 Geschrieben 15. März 2010 Das ist Pseudocode, ich weiß halt wie man so was macht Zitieren
LadyPreis Geschrieben 16. März 2010 Geschrieben 16. März 2010 :e@sy *kuss* Achtung flashpixx - du hast nen neuen Verehrer Zitieren
speedi Geschrieben 16. März 2010 Geschrieben 16. März 2010 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. Zitieren
Empfohlene Beiträge
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.